在TypeScript

时间:2017-06-12 14:00:20

标签: arrays generics typescript

如何将方法添加到类型为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,这对我来说是完全合理的。

有人能指出我正确的方向吗?

1 个答案:

答案 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));
    }
}

通过这种方式,您必须明确公开的内容,而不是混合将返回普通数组的继承基类的方法。随便挑选。