如何将方法添加到类型为Array<MyClass>
的数组?
考虑一种情况,你有一个类型化的数组,通过访问数组的所有项来提供一个属性/方法来计算一个值是有意义的。
class Foo {
date: Date
}
class FooArray extends Array<Foo> {
dateInterval() {
// Some algorithm that iterates over all dates to find
// min/max
return this.reduce(..)
}
}
但有些事告诉我,我的方向错了。例如,FooArray.splice()
会返回Foo[]
类型,而不是FooArray
,这对我来说是完全合理的。
有人能指出我正确的方向吗?
答案 0 :(得分:1)
我将为您提供2个选项
<强>铸造强>
只需将splice方法显式添加到覆盖继承的方法以返回您的首选类型,并使用强制转换
splice() {
let arr = super.splice();
return new FooArray(arr); // or some other way of casting
}
或者,包装
<强>包装强>
class FooArray {
constructor(private arr: Foo[]) { /* maybe copy the array...? */ }
splice(start: number, end?: number) {
return new FooArray(this.arr.splice(start, end));
}
}
通过这种方式,您必须明确公开的内容,而不是混合将返回普通数组的继承基类的方法。随便挑选。