我正在寻找一种在TypeScript中扩展元组的方法。
在C#中,您可以轻松做到:
public class extends String { ... }
在TypeScript中,我希望能够编写如下内容:
export class Field extends [string, string] { ... }
有什么想法吗?
注意:我的目标是命名每个元组成员。
答案 0 :(得分:2)
如果您的目标只是命名元组...
使用打字稿> 4.0(在撰写本文时为Beta),您现在可以命名元组:
type MyNamedTuple = [foo: string, bar: string];
在将...args
与元组泛型一起使用时,这有助于完成代码
答案 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}`);