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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:24:06