【问题标题】:Add method to typed arrays in TypeScript在 TypeScript 中向类型化数组添加方法
【发布时间】:2026-02-02 00:50:01
【问题描述】:

如何向类型化数组添加方法,例如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,这对我来说完全有意义。

谁能指出我正确的方向?

【问题讨论】:

    标签: arrays generics typescript


    【解决方案1】:

    我会为你提供 2 个选项

    选角

    只需显式添加拼接方法以覆盖继承的方法以返回您的首选类型,并使用强制转换

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

    这样你必须明确你公开的内容,而不是混合继承的基类的方法,这些方法将返回普通数组。任君挑选。

    【讨论】:

    • 谢谢,我希望有一些魔力,但明确暴露的内容可能只是要走的路。