class Awesome<ObjType extends Object,
KeyType extends keyof ObjType ,
MemberType /* is of type obj:ObjType obj[KeyType]*/>{}
如何将MemberType
约束为此ObjType
答案 0 :(得分:4)
我认为你在寻找MemberType extends ObjType[KeyType]
。
...键入构造,支持静态验证涉及动态属性名称和由此类动态名称选择的属性的代码...
- 来自实施该功能的Pull Request
对于您的代码,它的工作原理如下:
class Awesome<ObjType extends Object,
KeyType extends keyof ObjType ,
MemberType extends ObjType[KeyType]> { }
interface A {
a: number;
b: string;
}
// okay:
type A1 = Awesome<A, keyof A, string | number>
// not okay:
type A2 = Awesome<A, keyof A, boolean>
// okay:
type A3 = Awesome<A, 'a', number>
type A4 = Awesome<A, 'b', string>
// not okay:
type A5 = Awesome<A, 'a', boolean>
type A6 = Awesome<A, 'b', Date>
正如Daniel Rosenwasser所指出的,keyof
被称为“关键查询”,ObjType[KeyType]
是“索引访问类型”。