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

基于传入值推导函数返回类型的更优TypeScript实现方案

实现枚举值自动推导函数返回类型的TypeScript方案

核心思路

通过枚举-类型映射表将枚举值与对应的返回类型绑定,再利用TypeScript的泛型约束和索引访问类型,让函数根据传入的枚举参数自动推导返回类型,无需手动指定泛型。

完整代码实现

1. 定义基础接口与枚举

// 业务数据接口
interface SummaryData {
  summary: string;
  total: number;
}

interface ConfigurationData {
  configs: Record<string, string>;
  version: string;
}

interface StatusData {
  status: 'active' | 'inactive';
  lastUpdated: Date;
}

// 视图类型枚举
enum ViewTypeEnums {
  Summary = 1,
  Configuration = 2,
  Status = 3
}

2. 建立枚举与返回类型的映射

// 映射表:枚举值 -> 对应返回类型
type ViewTypeMap = {
  [ViewTypeEnums.Summary]: SummaryData;
  [ViewTypeEnums.Configuration]: ConfigurationData;
  [ViewTypeEnums.Status]: StatusData;
};

3. 改造getInfo函数

// 自动推导返回类型的函数
function getInfo<T extends ViewTypeEnums>(type: T): ViewTypeMap[T] {
  switch (type) {
    case ViewTypeEnums.Summary:
      return { summary: '总览统计', total: 150 } as ViewTypeMap[T];
    case ViewTypeEnums.Configuration:
      return { configs: { lang: 'zh-CN' }, version: 'v2.1.0' } as ViewTypeMap[T];
    case ViewTypeEnums.Status:
      return { status: 'active', lastUpdated: new Date() } as ViewTypeMap[T];
    default:
      throw new Error('不支持的视图类型');
  }
}

调用示例(无需手动指定泛型)

// 自动推导为SummaryData类型
const summaryData = getInfo(ViewTypeEnums.Summary);
console.log(summaryData.total); // 类型检查正常通过

// 自动推导为ConfigurationData类型
const configData = getInfo(ViewTypeEnums.Configuration);
console.log(configData.version); // 类型检查正常通过

// 自动推导为StatusData类型
const statusData = getInfo(ViewTypeEnums.Status);
console.log(statusData.status); // 类型检查正常通过

原理说明

  • ViewTypeMap 显式声明了每个枚举值对应的返回类型,建立了枚举与类型的强关联;
  • 函数泛型T约束为ViewTypeEnums的成员,确保传入的参数只能是枚举有效值;
  • 返回类型ViewTypeMap[T]通过索引访问类型,根据传入的type参数自动匹配对应的接口类型,TypeScript会完成自动推导。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:37:34