在typescript中可能有未定义值的逻辑运算符

时间:2017-09-19 11:29:04

标签: javascript typescript

我收到错误,但我并不完全明白为什么。我知道它可能是未定义的,因此我需要检查它是否存在,但如果我设置如下代码,那么我得到错误。但是,如果我将{showDescription &&替换为内联{isFeatureBlock && description &&,则效果非常好。如果我将它分配给const,为什么它不起作用? 注意:我已经简化为主要问题。

守则

isFeatureBlock是布尔值,description是可选字符串

const showDescription = isFeatureBlock && description

{showDescription && (
   <BlockDescription>
     {description}
   </BlockDescription>
 )}

错误

  1. &#39;类型&#39;字符串|的参数未定义&#39;不能分配给&#39; string&#39;类型的参数。输入&#39; undefined&#39;不能分配给&#39;字符串&#39;

1 个答案:

答案 0 :(得分:0)

这段代码没有任何问题,但我假设在您的实际代码中,您在某个需要正确字符串的地方使用description,这就是发出错误信号的地方。添加description &&时它起作用的原因是,在这种情况下,它的类型会在&&的右侧缩小。

对于description && SOME_EXP,TypeScript会将description的{​​{1}}类型缩小为string | undefined内的string,因为它可以静态地确定SOME_EXP在那里不会被定义。这仅适用于直接在description表达式左侧使用变量的情况,因此将其分配给常量并使用该常量不会起作用。