我收到错误,但我并不完全明白为什么。我知道它可能是未定义的,因此我需要检查它是否存在,但如果我设置如下代码,那么我得到错误。但是,如果我将{showDescription &&
替换为内联{isFeatureBlock && description &&
,则效果非常好。如果我将它分配给const,为什么它不起作用?
注意:我已经简化为主要问题。
守则
isFeatureBlock
是布尔值,description
是可选字符串
const showDescription = isFeatureBlock && description
{showDescription && (
<BlockDescription>
{description}
</BlockDescription>
)}
错误
答案 0 :(得分:0)
这段代码没有任何问题,但我假设在您的实际代码中,您在某个需要正确字符串的地方使用description
,这就是发出错误信号的地方。添加description &&
时它起作用的原因是,在这种情况下,它的类型会在&&
的右侧缩小。
对于description && SOME_EXP
,TypeScript会将description
的{{1}}类型缩小为string | undefined
内的string
,因为它可以静态地确定SOME_EXP
在那里不会被定义。这仅适用于直接在description
表达式左侧使用变量的情况,因此将其分配给常量并使用该常量不会起作用。