如何在TypeScript中编写泛型类的扩展作为getter函数?

12 浏览
0 Comments

如何在TypeScript中编写泛型类的扩展作为getter函数?

所以我学会了如何在TypeScript中创建扩展:

interface Array {
  lastIndex(): number
}
Array.prototype.lastIndex = function (): number { return this.length - 1 }

但是如何从中创建一个getter?例如:

interface Array {
  get lastIndex(): number
}
Array.prototype.lastIndex = function (): number { return this.length - 1 }

这样我就可以在代码中直接调用someArray.lastIndex作为getter了。

我找到了这个答案,但是代码对于泛型类型无法编译,而且以这种方式编写代码非常丑陋,也许我在TypeScript中要求太多了:如何使用getter扩展TypeScript类?

0
0 Comments

问题的出现原因:用户想要在TypeScript中为泛型类编写扩展,具体是为一个数组类添加一个获取最后一个元素的getter方法。

解决方法:用户可以使用接口和原型链来为泛型类编写扩展。首先,可以定义一个接口Array来扩展数组类,接口中定义了两个方法lastIndex和lastValue分别用于获取数组的最后一个元素的索引和值。然后,通过原型链将这两个方法添加到数组类的原型上。在实际使用时,可以通过调用数组实例的lastValue方法来获取最后一个元素的值。

下面是具体的代码示例:

interface Array {
    lastIndex(): number;
    lastValue(): T
}
Array.prototype.lastIndex = function (): number { return this.length - 1 };
Array.prototype.lastValue = function (): any { return this[this.lastIndex()] };
let myArray = ['111,', '43242asd', 'asdasdas'];
console.log(myArray.lastValue());

通过以上代码,用户扩展了数组类,添加了lastIndex和lastValue两个方法,可以在实例化的数组对象上直接调用这两个方法来获取最后一个元素的索引和值。

以上就是用户如何在TypeScript中为泛型类编写扩展的方法。通过接口和原型链的方式,用户可以为任意泛型类添加自定义的方法或属性。

0
0 Comments

问题的出现原因是typescript接口中的getter被认为是实现细节,无法直接在泛型类中扩展。解决方法是将getter声明为一个普通的只读属性,并在实现时使用getter语法。然而,扩展全局变量应该避免,因为这可能会与将来语言本身的更新产生冲突。虽然对于应用程序而言可能是一个有问题的决定,但对于库来说绝对是一个糟糕的决定。在应用程序启动过程中修改全局范围作为一部分是一个明智的决策,但是对于库作者来说,修改全局范围可能会对使用者产生负面影响。因此,将全局范围的修改保持最小化是一个好的做法。

0