typescript - 也是 T 类型的 Keyof

标签 typescript

有没有办法限制 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/

相关文章:

css - 为什么 backdropFilter 在 CSSStyleDeclaration 中不可用?

带有自身类类型的 TypeScript 克隆自身实例

javascript - Angular 7 中静态内容的通配符路由

javascript - 在 typescript 中返回 react 16个数组元素

Angular2 x-i18n 错误 : Unexpected value imported by the module

javascript - 如何使 Typescript 中的单例跨多个模块工作?

typescript - typescript promise 响应/错误的一般处理

javascript - 如何以 Angular 查找给定数组列表的所有行中是否存在相同的值

typescript - Action 创建者文档评论未显示

javascript - 我应该安装@types/node 吗?似乎 VSCode 自动安装了它