TypeScript中能否用字符串引用类型为函数添加动态返回类型
可以实现,核心思路是通过类型映射把字符串字面量和对应接口绑定,再配合泛型实现动态返回类型,具体实现如下:
1. 定义基础实体接口
interface Company { name: string } interface Employee { firstName: string lastName: string }
2. 定义实体类型映射表
建立传入的字符串参数和实体接口的一一对应关系:
interface EntityMap { Company: Company Employee: Employee }
3. 实现泛型findOne函数
// 泛型K约束为EntityMap的键,入参entityName类型为K,返回值为K对应的实体类型 function findOne<K extends keyof EntityMap>(entityName: K, id: number): EntityMap[K] { // 此处编写实际的查询逻辑(比如调用接口、查询本地存储等) // 注意:TS类型仅作用于编译阶段,运行时需要自行保证返回数据和对应接口结构匹配 return {} as EntityMap[K] }
效果验证
你给出的调用示例会自动推导正确的返回类型:
const company = findOne('Company', 1) // 编译器自动识别为Company类型 const employee = findOne('Employee', 2) // 编译器自动识别为Employee类型
补充说明
- 后续新增实体类型时,只需要在EntityMap中新增对应的键值对即可,不需要修改findOne函数的定义。
- 运行时TS的接口类型会被擦除,需要自行保证业务逻辑返回的实际数据和对应接口结构一致。
内容的提问来源于stack exchange,提问作者coatesap
相关产品推荐
相关产品推荐

