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

TypeScript如何根据传入枚举数组严格约束返回对象键类型

严格类型约束实现方案

通过泛型收窄入参的枚举成员范围,直接映射返回值的必填键类型,无需使用Partial做可选标记,具体实现如下:

核心修改逻辑

  • 给函数添加泛型参数T,约束为目标枚举的子类型,TS会根据实际传入的数组自动推导T为传入元素的联合类型
  • 返回值类型直接使用Record<T, string[]>,强制要求返回对象必须包含所有传入的枚举成员作为键,且值为字符串数组
  • 函数内部初始化结果对象时做类型断言即可,逻辑上循环会给所有传入的键赋值,不存在属性缺失问题

完整实现代码

// 模拟从数据库获取分组选项的方法
async function getGroupFromDb(group: Seasons): Promise<string[]> {
  return [];
}

enum Seasons {
  Spring = 1001,
  Summer = 1002,
  Fall = 1003,
  Winter = 1004,
}

export async function getGroupOptions<T extends Seasons>(groups: T[]): Promise<Record<T, string[]>>{
  const result = {} as Record<T, string[]>;

  for(const group of groups){
    result[group] = await getGroupFromDb(group);
  }

  return result;
}

类型效果

  • 当传入[Seasons.Spring, Seasons.Fall]时,返回值自动推导为Promise<Record<Seasons.Spring | Seasons.Fall, string[]>>
  • 访问返回值中未传入的枚举键(比如Seasons.Summer)时,TS会直接抛出类型错误
  • 访问传入的对应键时,无需可选链判空,TS可识别该属性必然存在

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:09:21