如何基于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
相关产品推荐
相关产品推荐

