我正在用一种新方法扩展字符串原型链,但当我try 使用它时,它抛出了一个错误:property 'padZero' does not exist on type 'string'.谁能帮我解决这个问题吗?

代码如下.在Typescript中也可以看到同样的错误.

interface NumberConstructor {
    padZero(length: number);
}
interface StringConstructor {
    padZero(length: number): string;
}
String.padZero = (length: number) => {
    var s = this;
    while (s.length < length) {
      s = '0' + s;
    }
    return s;
};
Number.padZero = function (length) {
    return String(this).padZero(length);
}

推荐答案

如果要增加class而不是instance,请增加构造函数:

declare global {
  interface StringConstructor {
    padZero(s: string, length: number): string;
  }
}

String.padZero = (s: string, length: number) => {
  while (s.length < length) {
    s = '0' + s;
  }
  return s;
};

console.log(String.padZero('hi', 5))

export {}

*如果您在.ts中输入declare global,但不输出任何内容,则需要底部的空导出.这将强制文件成为一个模块*

如果你想要instance(又名prototype)上的功能,

declare global {
  interface String {
    padZero(length: number): string;
  }
}

String.prototype.padZero = function (length: number) {
  let d = String(this)
  while (d.length < length) {
    d = '0' + d;
  }
  return d;
};

console.log('hi'.padZero(5))

export {}

Typescript相关问答推荐

实现忽略了JSSOM中的doctor.body.innerHTML集

将对象属性路径描述为字符串数组的类型

React-Native运行方法通过监听另一个状态来更新一个状态

参数类型undefined不能分配给参数类型字符串|未定义

TypeScript:在作为参数传递给另一个函数的记录中对函数的参数实现类型约束

如果字符串文字类型是泛型类型,则用反引号将该类型括起来会中断

是否可以从函数类型中创建简化的类型,go 掉参数中任何看起来像回调的内容,而保留其余的内容?

如何避免推断空数组

`fetcher.load`是否等同于Get Submit?

如何在Vue中使用Enum作为传递属性的键类型?

Angular material 无法显示通过API获取的数据

ANGLE NumberValueAccessor表单控件值更改订阅两次

从类型脚本中元组的尾部获取第n个类型

使用或属性编写无限嵌套的接口

为什么受歧视的unions 在一种情况下运作良好,但在另一种非常类似的情况下却不起作用?

使用NextJS中间件重定向,特定页面除外

如何避免TS2322;类型any不可分配给类型never;使用索引访问时

必须从注入上下文调用Angular ResolveFn-inject()

Next 13 + React 18 createContext 类型的构建问题

React HashRouter,单击导航栏时页面重新加载出现问题