根据TypeScript文档,扩展已有接口就像重新声明具有新属性,然后为其提供实现一样简单。我曾多次使用这种技术将静态方法扩展到本机JavaScript对象中。但是,对于成员函数,这种方法不起作用。
例如( TypeScript Playground链接):
上述代码可以成功编译,但在运行时会抛出以下异常:
Uncaught TypeError: _this.toExponential is not a function
罪魁祸首似乎是TypeScript为此场景生成JavaScript代码的方式:
很明显,这里的“_this”没有引用到“Number”实例。我不确定我是否做错了什么,或者在TypeScript中以这种方式扩展本地对象是否被支持。
例如( TypeScript Playground链接):
interface Number {
toPowerOf10: () => string;
}
Number.prototype.toPowerOf10 = (): string => {
return this.toExponential();
}
var n: Number = 10000;
n.toPowerOf10();
上述代码可以成功编译,但在运行时会抛出以下异常:
Uncaught TypeError: _this.toExponential is not a function
罪魁祸首似乎是TypeScript为此场景生成JavaScript代码的方式:
var _this = this;
Number.prototype.toPowerOf10 = function () {
return _this.toExponential();
};
var n = 1000;
alert(n.toPowerOf10());
很明显,这里的“_this”没有引用到“Number”实例。我不确定我是否做错了什么,或者在TypeScript中以这种方式扩展本地对象是否被支持。
function () {
而不是(): string => {
解决了这个问题,有人知道规范吗?这是期望的行为还是一个错误? - olydisimplements Number
实现了自己的 Number 类,则使用箭头函数是可以的。在原型中分配一个函数是解决问题的方法。 - CodingIntrigue