You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:30:55