don*_*don 8 generics typescript keyof
我想声明一种类型,它需要将给定类型的所有键都T包含在一个数组中,例如:
checkKeys<T>(arr: Array<keyof T>): void {
// do something
}
interface MyType {
id: string;
value: number;
}
Run Code Online (Sandbox Code Playgroud)
目前,如果调用checkKeys<MyType>TS 将认为传递的值是有效的,如果它包含MyType( id | value) 的任何键:
checkKeys<MyType>(['id', 'value']); // valid
checkKeys<MyType>(['id']); // valid
checkKeys<MyType>(['id', 'values']); // invalid
Run Code Online (Sandbox Code Playgroud)
是否可以要求在数组中指定所有键?
你不能用数组类型来做到这一点(至少我不知道一种将键的联合扩展到元组类型的方法,可能有一种我只是不知道)。另一种方法是使用对象文字来实现类似的效果。语法有点详细,但编译器将验证是否只指定了正确的键。我们将使用Record映射类型,并且可以使用0值的文字类型,因为只有键很重要。
function checkKeys<T>(o: Record<keyof T, 0>): void {
// do something
}
interface MyType {
id: string;
value: number;
}
checkKeys<MyType>({ id: 0, value: 0 }); // valid
checkKeys<MyType>({ id: 0 }); // invalid
checkKeys<MyType>({ id: 0, values: 0 }); // invalid
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5819 次 |
| 最近记录: |