Typescript如何提取interface中值类型为string的键组成新类型
实现方案
你可以通过 TypeScript 自带的条件类型+映射类型能力实现需求,还可以封装成通用工具类型复用:
1. 定义通用筛选工具类型
// 泛型 T 是源接口/类型,U 是要匹配的值类型 type KeysOfType<T, U> = { [K in keyof T]: T[K] extends U ? K : never }[keyof T]
2. 直接使用得到目标类型
type MyType = KeysOfType<MyInterface, string> // 此时 MyType 自动推导为:'val1' | 'val2' | 'val4',完全符合预期
原理解释
- 先遍历源类型的所有键,对每个键做类型判断:如果该键对应的值类型符合目标类型,就保留键名,否则返回
never - 最后取所有属性值的联合类型,
never会在联合类型计算时自动被剔除,最终剩下的就是所有值类型匹配的键
验证示例
const validKey: MyType = 'val2' // 类型校验正常通过 const invalidKey: MyType = 'val3' // 类型报错,val3对应的值类型是number,不在允许范围内
内容的提问来源于stack exchange,提问作者LCIII
相关产品推荐
相关产品推荐

