有没有办法限制 keyof T
使其只接受特定类型的 key ?假设如下:
interface Something {
id: number;
name: string;
value1: FancyType;
value2: FancyType;
value3: FancyType;
}
function someFunction(key: keyof Something) {
// do something to a FancyType
}
someFunction
会接受 id |姓名 |值 1 |值2 | value3
,有没有办法将其限制为 FancyType
类型的键,即 value1 |值2 |值 3
?
最佳答案
从 TypeScript 2.8 开始,这可以通过 conditional types 实现(Code)。
type FancyProperties<T> = Pick<T, {
[K in keyof T]: T[K] extends FancyType ? K : never
}[keyof T]>;
function someFunction(key: keyof FancyProperties<Something>) {
// do something to a FancyType
}
someFunction("id"); // Error
someFunction("value2"); // OK
关于typescript - 也是 T 类型的 Keyof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49796842/