如何重构三元运算符?使用&&替代三元运算符出现类型错误如何解决
问题产生原因
逻辑运算符的运算规则理解错误
JavaScript 中&&逻辑与运算符的返回规则为:左操作数为假值时直接返回左操作数本身,仅左操作数为真值时才返回右操作数的值。你改写的format = fromNow && 'LLL',当fromNow为布尔类型的假值时,返回结果是布尔值false而非你预期的空字符串,赋值给声明为string类型的format变量时,就会触发 TypeScript 类型不匹配报错。原三元表达式的逻辑适配错误
你原本的三元表达式format = fromNow ? '' : 'LLL'的实际逻辑是:fromNow为真值时format赋值为空字符串,fromNow为假值时赋值为'LLL'。你改写的&&表达式逻辑完全相反,哪怕没有类型问题,运行结果也不符合预期。你之前了解的a && b等价于a ? b : ''的写法,仅适用于三元表达式假分支为空字符串的场景,和你当前的场景不符。
正确重构方案
方案1(推荐):保留原三元表达式
原三元表达式本身已经足够简洁,可读性最高,且天然符合 TypeScript 类型要求,无需额外修改:
format = fromNow ? '' : 'LLL'
方案2:逻辑运算符改写(不推荐,可读性差)
如果你一定要用逻辑运算符实现相同逻辑,可以按如下写法,确保所有分支返回值都是字符串类型:
format = (!fromNow && 'LLL') || ''
该写法的运行逻辑和原三元表达式完全一致,但可读性远低于三元表达式,更易出现维护问题。
内容的提问来源于stack exchange,提问作者RheinmetallSkorpion
相关产品推荐
相关产品推荐

