我正在使用TypeScript React和Meteor编辑应用程序。目前我得到以下状态:
{user && ( ... )}
仅当访问者是登录用户时才会显示一些数据。如果锦标赛不取消,我会想要显示仅数据。所以我试着添加
{user && !tournament.state === 'cancelled' && ( ... )}
哪个不起作用。我收到以下短信:
运营商' ==='不能应用于类型' boolean'和'"取消"'。
我该如何解决这个难题?
答案 0 :(得分:5)
!tournament.state
否定tournament.state
,而不是后面的===
,导致该部分true
或false
,为您提供true === 'cancelled'
或false === 'cancelled'. Hence the issue with using
===`关于布尔值和字符串。
使用!==
:
{user && tournament.state !== 'cancelled' &&
从技术上讲,你也可以使用括号,但它不会是惯用的:
{user && !(tournament.state === 'cancelled') &&
答案 1 :(得分:2)
TypeScript抱怨,因为您试图将布尔值:!tournament.state
与字符串'cancelled'
进行比较。
!
符号会将 truthy / falsy 结果转换为布尔值。这是因为假设tournament.state
等于'cancelled'
:
!tournament.state = !'cancelled' = false
三等于运算符然后检查值和类型。您的代码不仅会受到TypeScript的不喜欢,而且也是不正确的,因为tournament.state
的每个值都将无法通过检查,因为它总是最终作为字符串的布尔值。你需要的是:
{user && tournament.state !== 'cancelled' && ( ... )}