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

如何基于TypeMap自动生成TypeScript多签名函数类型?

TypeScript自动基于键值映射构建多签名函数类型

TypeScript完全支持这个需求,无需手动枚举TypeMap中的每个键,通过映射类型+联合类型即可自动生成符合要求的多签名函数类型。

实现方案

核心思路是遍历TypeMap的所有键,为每个键生成对应的函数签名,再将这些签名合并为联合类型——TypeScript会自动将函数联合解析为多签名函数,调用时能根据传入的字面量参数精准推断返回类型。

示例代码如下:

// 假设已有键值映射类型
type TypeMap = {
  a: A;
  b: B;
  // ... 其他100+键值对
};

// 自动生成多签名函数类型
type MultiSignatureFn = {
  [K in keyof TypeMap]: (key: K) => TypeMap[K]
}[keyof TypeMap];

完整示例验证

// 定义具体类型
type A = { type: 'A' };
type B = { type: 'B' };
type TypeMap = {
  a: A;
  b: B;
  c: number;
  d: string;
};

// 生成多签名函数类型
type MultiSignatureFn = {
  [K in keyof TypeMap]: (key: K) => TypeMap[K]
}[keyof TypeMap];

// 实现函数逻辑
const getValue: MultiSignatureFn = (key) => {
  const dataMap: TypeMap = {
    a: { type: 'A' },
    b: { type: 'B' },
    c: 123,
    d: 'hello'
  };
  return dataMap[key];
};

// 调用测试(类型自动推断)
const aResult = getValue('a'); // 类型为A
const bResult = getValue('b'); // 类型为B
const cResult = getValue('c'); // 类型为number

优势说明

  • 无需手动维护函数签名:TypeMap新增、修改或删除键时,MultiSignatureFn会自动同步更新,完全适配100+键的大规模场景。
  • 类型安全:调用时传入不同的字面量参数,TypeScript会自动推断对应的返回类型,避免类型不匹配问题。

内容的提问来源于stack exchange,提问作者Jeff Brower

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:02:49