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

TypeScript中如何将接收的字符串转换为自定义枚举值

实现方案

1. 定义JobStatus字符串枚举

首先定义包含所有合法业务状态、带兜底默认值的字符串枚举,枚举值需要和JSON文件中存储的合法状态字符串完全匹配(大小写、字符完全一致):

export enum JobStatus {
  // 以下为仓储作业场景示例值,替换为你业务实际的合法状态即可
  Pending = 'PENDING',
  InProgress = 'IN_PROGRESS',
  Completed = 'COMPLETED',
  Cancelled = 'CANCELLED',
  // 非法值兜底默认值,可根据业务需求调整为其他默认状态
  Default = 'UNKNOWN'
}

2. 编写安全的状态转换逻辑

你原来的JobStatus[job.status]写法仅适用于数字枚举的反向映射,字符串枚举不支持该写法,且没有做非法值校验,需要替换为带校验的转换逻辑:

/**
 * 把原始JSON中的状态字符串转换为合法JobStatus枚举值
 * 非预定义值统一返回兜底默认值
 */
const parseJobStatus = (rawStatus: string): JobStatus => {
  const validStatusList = Object.values(JobStatus);
  return validStatusList.includes(rawStatus as JobStatus) 
    ? (rawStatus as JobStatus) 
    : JobStatus.Default;
};

3. 修正数据导入映射逻辑

原始JSON读取出来的status字段是任意字符串,不符合Job类型约束,不要直接把原始数据标注为Job类型,先定义原始数据类型再做映射:

// 定义JSON原始数据类型,status为未校验的字符串
type RawJob = Omit<Job, 'status' | 'boxCount'> & {
  status: string;
};

const jobs: Job[] = (jobsRaw as RawJob[]).map((job) => ({
  ...job,
  status: parseJobStatus(job.status),
  boxCount: job.relatedBoxes.length,
}));

注意事项

  • 枚举中的字符串值必须和jobs.json中存储的合法状态值完全一致,包括大小写、特殊字符,否则会被判定为非法值走兜底逻辑
  • 如果JSON中存储的是中文状态值,直接把枚举赋值改为对应中文即可,比如Pending = '待处理',转换逻辑无需调整
  • 兜底默认值可根据业务需求修改,比如需要把非法状态默认设为待处理,直接把Default对应的值改为PENDING即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:09:16