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

如何在TypeScript中用映射类型为Map<>定义类型替换Function类型修复ESLint报错

第一步:定义枚举与函数类型的映射关系

首先建立枚举值到对应函数类型的映射表,完全匹配你定义的三个函数类型:

type ApiFunctionMap = {
  [ApiEnum.CREATE_NAME]: CreateName
  [ApiEnum.CREATE_COMPANY]: CreateCompany
  [ApiEnum.UPDATE_NAME]: UpdateName
}

第二步:修正Map的类型定义

把原来的Function类型替换为映射表的所有函数类型的联合类型,同时不需要再用as Function做类型断言,即可解决ESLint报错:

const api: Map<ApiEnum, ApiFunctionMap[keyof ApiFunctionMap]> = new Map([
  [ApiEnum.CREATE_NAME, createName],
  [ApiEnum.CREATE_COMPANY, createCompany],
  [ApiEnum.UPDATE_NAME, updateName],
]);

(可选)实现调用时的类型安全

如果想要调用api的时候自动推导参数和返回值类型,避免调用出错,可以额外封装一个通用调用方法:

function callApi<T extends ApiEnum>(
  apiName: T,
  variables: Parameters<ApiFunctionMap[T]>[0]
): ReturnType<ApiFunctionMap[T]> {
  const fn = api.get(apiName) as ApiFunctionMap[T];
  return fn(variables);
}

调用示例:

// 自动提示参数需要是number类型,返回值类型为Promise<{data: number}>
const res = callApi(ApiEnum.CREATE_NAME, 123);

额外注意

你当前定义的函数类型标注了返回Promise,但实际函数实现是同步返回对象,两者不匹配,按需二选一修正即可:

  • 把函数改为async函数,自动包裹Promise
  • 去掉函数类型定义里的Promise<>包裹层

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:00:00