【问题标题】:Logical operators with possible undefined value in typescript打字稿中可能具有未定义值的逻辑运算符
【发布时间】:2017-09-19 11:29:04
【问题描述】:

我遇到了一个错误,我不完全明白为什么。我知道它可能是未定义的,因此我需要检查它是否存在,但如果我设置如下代码,那么我会收到错误。但是,如果我将{showDescription && 替换为{isFeatureBlock && description && inline,它会完美运行。如果我将它分配给 const,为什么它不起作用? 注意:我已经简化以专注于主要问题。

守则

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

const showDescription = isFeatureBlock && description

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

错误

  1. '字符串类型的参数 | undefined' 不能分配给'string' 类型的参数。类型“未定义”不可分配给类型“字符串”

【问题讨论】:

  • 你能解释一下这是什么行:{showDescription &amp;&amp; ( &lt;BlockDescription&gt; {description} &lt;/BlockDescription&gt; )}?是物体还是别的什么?
  • 它只是返回一个包含一些文本的 div,尽管我注意到需要更新错误,因为我包含了来自其他内容的错误。对象未定义与另一个问题有关。我的错。第一个错误仍然适用。

标签: javascript typescript


【解决方案1】:

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

对于description &amp;&amp; SOME_EXP,TypeScript 将description 的类型从string | undefined 缩小到stringSOME_EXP,因为它可以静态确定description 不会在那里未定义。这仅在您直接在 &amp;&amp; 表达式的左侧使用变量时才有效,因此将其分配给常量并使用该常量将不起作用。

【讨论】:

  • 顺便说一句,感谢您的解释正是我所需要的,我没有意识到类型会变窄真的很困惑!
猜你喜欢
  • 2020-12-13
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-30
  • 2019-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多