Typescript类扩展了Tuple

时间:2018-10-23 09:10:14

标签: typescript inheritance tuples

我正在寻找一种在TypeScript中扩展元组的方法。

在C#中,您可以轻松做到:

public class extends String { ... }

在TypeScript中,我希望能够编写如下内容:

export class Field extends [string, string] { ... }

有什么想法吗?

注意:我的目标是命名每个元组成员。

2 个答案:

答案 0 :(得分:2)

如果您的目标只是命名元组...

使用打字稿> 4.0(在撰写本文时为Beta),您现在可以命名元组:

type MyNamedTuple = [foo: string, bar: string];

在将...args与元组泛型一起使用时,这有助于完成代码

enter image description here

答案 1 :(得分:0)

如果您需要命名元组成员,则最好使用一个界面。

如果您确实想要派生元组,则可以做到这一点,但是您将需要一个元组构造函数作为基类。运行时元组只是javascript中的数组,因此我们真正想要的是为Array构造函数键入别名,因此您实际上是在继承Array

const tupleConstructor: new (...p: [string, string]) => [string, string] = Array as any;
class Field extends tupleConstructor{ 
  constructor(...p: [string, string]) {
    super(...p);
    (this as any).__proto__ = Field.prototype; // fix for inheriting arrays
  }
  get firstName() { return this[0]; }
  get lastName() { return this[1];}
}

let a = new Field("1", "1");
let [a0, a1] = a;
console.log(`0: ${a0}`);
console.log(`1: ${a1}`);

let { firstName, lastName} = a;
console.log(`firstName: ${firstName}`);
console.log(`lastName: ${lastName}`);