javascript - typescript 中可能具有未定义值的逻辑运算符

标签 javascript typescript

我收到错误,但我不完全明白原因。我知道它可能是未定义的,因此我需要检查它是否存在,但如果我按如下方式设置代码,则会收到错误。但是,如果我将 {showDescription && 替换为 {isFeatureBlock && description && 内联,它就可以完美工作。如果我将它分配给 const 为什么它不起作用? 注意:我已简化以关注主要问题。

代码

isFeatureBlock 是一个 bool 值,description 是可选字符串

const showDescription = isFeatureBlock && description

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

错误

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

最佳答案

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

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

关于javascript - typescript 中可能具有未定义值的逻辑运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46299274/

相关文章:

javascript - jQuery/JavaScript - 隐藏所有带 ID 的元素并保留所有其他元素

javascript - 如何使用 jquery 在选择框中设置值并拥有正确的选项 'selected"

typescript 。我可以定义条件类型吗?

typescript 1.3 有时会给出错误的类型不匹配错误

angular - Angular 6 中不纯管道的替代方案?

javascript - 如何使用 javascript 或 typescript 在新窗口中打开页面?

angular - 无法访问 Angular 模板中的枚举

c# - 插入数据并用新数据刷新数据网格后关闭弹出窗口

javascript - 如何在 Javascript 中比较完全相同的字符串但具有不同的 charCodes

javascript - 使用 AJAX 和 POST 运行 php 脚本