在 TypeScript 中向类型化数组添加方法

Posted

技术标签:

【中文标题】在 TypeScript 中向类型化数组添加方法【英文标题】:Add method to typed arrays in TypeScript 【发布时间】:2017-11-14 00:59:41 【问题描述】:

如何向类型化数组添加方法,例如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】:

我会为你提供 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));
    

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

【讨论】:

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

以上是关于在 TypeScript 中向类型化数组添加方法的主要内容,如果未能解决你的问题,请参考以下文章

更改(映射)JSON列表形状 - 在TypeScript中向对象添加标记

打字稿:“关注”条件类型

PHP试图在while循环中向数组添加值

在打字稿中向对象数组插入新值

编写自定义指令以在 AngularJS (TypeScript) 中向 ng-options 添加工具提示

如何区分 TypeScript 重载中的类型对象和数组?