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

如何在TypeScript中定义键关联返回类型的MapFn函数类型?

定义参数与返回值类型关联的MapFn类型

这完全在TypeScript的能力范围内,你需要通过泛型函数类型实现参数键与返回值类型的绑定,让TypeScript能根据传入的具体键推断出对应的返回值类型。

正确的MapFn定义

type Mapping = {
    a: number,
    b: string,
    c: CustomType1,
    d: CustomType2
};

type MapFn = <K extends keyof Mapping>(key: K) => Mapping[K];

原理说明

  • 泛型参数K被约束为keyof Mapping的子类型,意味着它只能是Mapping的某一个具体键(而非所有键的联合类型)。
  • 当调用mapFn时,TypeScript会根据传入的具体键自动推断K的类型,并将返回值类型严格对应到Mapping[K],实现参数与返回值的类型关联。

使用验证

const mapFn: MapFn = getMapFnSomehowIdontCare();
const mapFnResult1 = mapFn('c'); // 类型自动推导为 CustomType1
const mapFnResult2 = mapFn('a'); // 类型自动推导为 number

为什么之前的写法不生效

你之前尝试的type MapFn = (key: keyof Mapping) => Mapping[keyof Mapping];存在两个核心问题:

  1. 参数key是所有键的联合类型,TypeScript无法确定你传入的是哪一个具体键。
  2. 返回值是所有值类型的联合类型,无论传入哪个键,返回值都会被推断为number | string | CustomType1 | CustomType2,无法实现键与值类型的一一对应。

内容的提问来源于stack exchange,提问作者Gershom Maes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:24:56