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

简化TypeScript中的If语句实现状态映射

更简洁的状态映射实现方式

从Java转TypeScript后,你可以利用TS的类型系统和JS的数组、对象特性,替代繁琐的if判断,下面是几种简洁易读的实现方案:

方案一:映射对象 + 数组解构

先定义字符与状态的对应关系表,再将输入字符串拆分为数组后批量映射,逻辑清晰且易于维护:

// 定义字符到状态的映射表
const statusMap: Record<'0' | '1' | '2', 'no' | 'yes' | 'unknown'> = {
  '0': 'no',
  '1': 'yes',
  '2': 'unknown'
};

// 假设输入为长度3的目标字符串
const input = '102';
// 解构获取三个位置的状态
const [statusA, statusB, statusC] = [...input].map(char => statusMap[char]);

后续如果需要调整字符与状态的对应关系,只需修改statusMap即可,无需改动业务逻辑代码。

方案二:封装映射函数 + 数组处理

如果场景简单,也可以把判断逻辑封装成函数,配合数组map方法批量处理:

// 单个字符转状态的函数
const charToStatus = (char: '0' | '1' | '2') => 
  char === '0' ? 'no' : char === '1' ? 'yes' : 'unknown';

const input = '210';
const [s1, s2, s3] = [...input].map(charToStatus);

这种方式把判断逻辑内聚到函数中,代码紧凑且职责单一。

方案三:增强类型约束(可选)

如果需要更严格的类型校验,避免传入不符合要求的字符串,可以用TS的模板字面量类型约束输入:

// 约束输入必须是长度为3、仅含0/1/2的字符串
type ValidInput = `${'0' | '1' | '2'}${'0' | '1' | '2'}${'0' | '1' | '2'}`;
// 用as const让TS推导映射表的具体类型
const statusMap = { '0': 'no', '1': 'yes', '2': 'unknown' } as const;

// 封装成函数,确保输入合规
function convertStatus(input: ValidInput) {
  return [...input].map(char => statusMap[char]);
}

// 使用示例
const result = convertStatus('120'); // 类型推导为 ['yes', 'unknown', 'no']

这种方案在编译阶段就能拦截不符合要求的输入,提升代码健壮性。

内容的提问来源于stack exchange,提问作者behzad k.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:15:45