如何遍历接口键生成值类型依赖键名的新TypeScript接口
如何遍历接口键生成值类型依赖键名的TypeScript接口
我们需要定义一个类型IParse<T>,遍历接口T的所有键,实现:
- 当键名为
'a'时,对应值类型为number - 其余键的对应值类型为
string
原代码将所有属性值都设为string,无法满足需求:
type IParse<T> = { [K in keyof T as K extends string ? K : never]: string // 这里需要修改,让K为'a'时类型是number } interface X { a: number b: string c: string[] d: number[] } type Result = IParse<X> // 实际得到的类型 interface Actual { a: string b: string c: string d: string } // 期望得到的类型 interface Expected { a: number b: string c: string d: string }
解决方案
通过条件类型在映射类型中根据键名动态指定值类型即可实现需求:
type IParse<T> = { [K in keyof T as K extends string ? K : never]: K extends 'a' ? number : string } interface X { a: number b: string c: string[] d: number[] } type Result = IParse<X> // Result的类型符合预期: // { // a: number; // b: string; // c: string; // d: string; // }
说明
- 映射部分
[K in keyof T as K extends string ? K : never]用于过滤非字符串类型的键,确保只处理接口中的字符串键 - 值类型分支
K extends 'a' ? number : string实现了键名依赖的类型映射:匹配到键'a'时使用number类型,其余键统一使用string类型
内容的提问来源于stack exchange,提问作者kennarddh
相关产品推荐
相关产品推荐

