简化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.
相关产品推荐
相关产品推荐

