Typescript如何将属性作为其类的泛型参数T的键列表进行整理?

时间:2019-01-23 14:04:25

标签: generics typescript-generics

class A<T> {
    fields: Array<???>;
}

我希望字段包含T的属性列表。 我已经尝试过A<T, K extends keyof T>,但是在子类B extends A<C, ???>中继承时,我需要提供两个参数。我试图将type K extends/= keyof T移到类主体中,但是Typescript无法识别。

问:参数化类型变量类的参数列表的正确类型注释是什么?

PS A永远不会直接实例化,而是在之后被继承(例如,class B extends A<C> ...然后fields将被填充在那些子类中)

1 个答案:

答案 0 :(得分:0)

找到了一个解决方案:

type KeysOf<T1> = keyof T1;

class A<T2> {
    fields: Array<KeysOf<T2>>;

请注意,这两个T不同,只是我的约定。 KeysOf所描述的类型是通用的。这样一来,我以后就可以通过我的班级参数化了。

请注意,我不得不在类主体之外声明该类型别名,因为Typescript拒绝以其他方式编译。

请注意type仅支持某些打字稿语言版本的泛型,因此该技巧可能在较旧的版本中不起作用。