如果没有boolean和字符串

时间:2017-04-07 14:51:02

标签: javascript typescript

我正在使用TypeScript React和Meteor编辑应用程序。目前我得到以下状态:

  {user && ( ... )}

仅当访问者是登录用户时才会显示一些数据。如果锦标赛取消,我会想要显示数据。所以我试着添加

  {user && !tournament.state === 'cancelled' && ( ... )}

哪个不起作用。我收到以下短信:

  

运营商' ==='不能应用于类型' boolean'和'"取消"'。

我该如何解决这个难题?

2 个答案:

答案 0 :(得分:5)

!tournament.state否定tournament.state,而不是后面的===,导致该部分truefalse,为您提供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' && ( ... )}