TypeScript中如何为自定义rebuild函数实现精准返回类型推导
rebuild 函数的 TypeScript 类型定义问题
我需要实现一个rebuild函数,能够根据配置对象的规则从现有对象中提取对应字段生成新对象。配置对象的键为需要提取的目标键,值为对应期望的类型标记字符串,基础示例如下:
const result = rebuild(query, { name: 'string' }); // query - { name: '123', dont_need: true } // result - { name: '123' }
目前我已经完成了该函数的逻辑实现,但在类型定义编写上遇到了问题。之前尝试的实现方案代码如下:
type Type = 'string' | 'number'; type Config = Record<string, Type>; interface ConfigType { string: string; number: number; } type RebuiltResult<T extends Config> = { [key in keyof T]: ConfigType[T[keyof T]] }
但当前推导得到的返回类型中,name字段的类型为string | number,这是因为在类型定义中直接使用了通用的keyof T来获取类型映射。我知道可以实现精准的对应类型推导,但不清楚具体该如何编写类型定义。
实际使用场景参考
更多使用场景的表现如下:
- 当源对象字段类型与配置要求匹配时,会被提取到结果中:
const query = { name: 'Ivan', money: 3000, age: 20 } const ivan = rebuild(query, { name: 'string', money: 'number' }) // type - { name?: string; money?: number } // value - { name: 'Ivan', money: 3000 } - 当源对象字段类型与配置要求不匹配时,该字段不会被包含在结果中:
const ivan = rebuild(query, { name: 'string', money: 'string' }) // type - { name?: string; money?: string } // value - { name: 'Ivan' } // no money, since it's a number
内容的提问来源于stack exchange,提问作者Vladimir
相关产品推荐
相关产品推荐

