TypeScript方法传入合法参数仍抛异常:条件判断问题排查
问题分析与解决办法
你的代码里的条件判断逻辑存在根本性错误,导致不管传入合法还是非法参数,都会触发异常抛出。
错误原因
你写的if (transactionType != 'ADD' || 'REMOVE')或者if (transactionType !== 'ADD' || 'REMOVE')中,'REMOVE'是一个非空字符串,在布尔语境下会被自动转为true。这就意味着整个条件表达式永远为true,所以不管transactionType是什么值,都会执行throw语句。
正确写法
写法一:使用逻辑与(&&)明确判断参数不属于合法类型
async completeAddRemove(transactionType: string) { if (transactionType !== 'ADD' && transactionType !== 'REMOVE') { throw new Error(`Unrecognised transaction type provided`); } // 这里写方法的核心逻辑 }
写法二:用数组包含判断,扩展性更好
如果后续需要增加更多合法类型,这种写法更容易维护:
async completeAddRemove(transactionType: string) { const validTransactionTypes = ['ADD', 'REMOVE']; if (!validTransactionTypes.includes(transactionType)) { throw new Error(`Unrecognised transaction type provided`); } // 这里写方法的核心逻辑 }
进阶优化:用TypeScript字面量类型提前拦截错误
直接通过类型定义限制参数只能是'ADD'或'REMOVE',让TypeScript在编译阶段就检查参数合法性,避免运行时才抛出错误:
async completeAddRemove(transactionType: 'ADD' | 'REMOVE') { // 无需额外判断,TypeScript会强制传入的参数只能是指定的两个值 // 这里写方法的核心逻辑 }
内容的提问来源于stack exchange,提问作者BruceyBandit
相关产品推荐
相关产品推荐

