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

如何在TypeScript中为字面量名称编写泛型简化函数重载?

解决方案

可以通过泛型配合类型映射表实现需求,无需手动编写大量函数重载。

步骤1:定义资源类型映射

先声明一个接口,用来统一管理所有资源名字面量和对应类型的映射关系:

interface Note {
  id: number,
  title: string,
  text: string
}
interface Comment {
  id: number,
  content: string,
  noteId: number
}

// 资源映射表,后续新增资源只需要在这里加键值对
interface ResourceTypeMap {
  note: Note;
  comment: Comment;
}

步骤2:声明泛型化的create函数

直接基于上面的映射表定义泛型函数即可,如果是在.d.ts声明文件中,加declare前缀即可:

function create<K extends keyof ResourceTypeMap>(name: K, attrs: ResourceTypeMap[K]): ResourceTypeMap[K] {
  // 此处为js-data原有实现逻辑,声明文件中可省略函数体
}

效果验证

完全符合预期的类型校验规则:

  • 资源名拼写错误时,TS会直接抛出类型错误
  • 传入的attrs和对应资源类型不匹配时,TS会自动识别抛出错误
  • 后续新增资源无需修改create函数,只需要在ResourceTypeMap中追加映射关系即可,维护成本极低

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:45:03