TypeScript中能否用映射条件类型实现记录类型到函数类型的映射?
TypeScript映射条件类型与记录转函数类型的问题解答
嘿,这两个问题都很实用,我来一步步给你拆解:
问题1:能否使用映射条件类型从记录类型映射到函数类型?
当然可以!映射条件类型的核心是通过{ [K in keyof T]: ... }遍历对象的每个属性并转换类型,虽然它主要针对对象属性,但结合TypeScript的类型推断、联合转元组等工具,完全能实现从记录类型到函数类型的转换。简单来说,我们可以把记录的属性映射成函数的参数列表,再让函数返回原记录类型,这完全在映射条件类型的能力范围内(配合一些辅助类型)。
问题2:从MyType生成指定的MyTypeFn
首先纠正一个小细节:TypeScript里没有int类型,咱们换成标准的number来写哈。接下来用映射条件类型实现你要的函数类型:
完整实现代码
// 修正后的原记录类型 type MyType = { foo: number; bar: string }; // 辅助类型:提取记录的键值对为联合元组类型 type RecordEntryUnion<T> = { [K in keyof T]: [K, T[K]] }[keyof T]; // 核心映射条件类型:把记录转成目标函数类型 type RecordToFunction<T> = ( ...args: RecordEntryUnion<T> extends [infer PropName, infer PropType] ? { [_ in PropName]: PropType } : never ) => T; // 生成你要的MyTypeFn type MyTypeFn = RecordToFunction<MyType>;
此时MyTypeFn的类型就等价于(foo: number, bar: string) => MyType,完美匹配你的需求。
如果只是针对这个特定的MyType,也可以写更简洁的版本(不过优先用映射条件类型的话,上面的通用版本更合适):
type MyTypeFn = (foo: MyType['foo'], bar: MyType['bar']) => MyType;
内容的提问来源于stack exchange,提问作者robkuz
相关产品推荐
相关产品推荐

