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
将被填充在那些子类中)
答案 0 :(得分:0)
找到了一个解决方案:
type KeysOf<T1> = keyof T1;
class A<T2> {
fields: Array<KeysOf<T2>>;
请注意,这两个T不同,只是我的约定。
KeysOf
所描述的类型是通用的。这样一来,我以后就可以通过我的班级参数化了。
请注意,我不得不在类主体之外声明该类型别名,因为Typescript拒绝以其他方式编译。
请注意type
仅支持某些打字稿语言版本的泛型,因此该技巧可能在较旧的版本中不起作用。