2017-04-07 136 views
1

我正在编辑使用TypeScript React和流星的应用程序。目前我得到以下状态:打字稿如果和如果不与布尔和字符串

{user && (...)} 

这只显示一些数据,如果访问者是登录用户。我虽然想显示数据只有如果比赛是不是取消。所以我试图加

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

哪个不行。我收到以下短信息:

运算符'==='不能应用于类型'布尔值'和''已取消''。

我该如何解决这个难题?

+1

......必须有一个dupetarget这个。 –

回答

2

打字稿抱怨,因为您要比较一个布尔值: !tournament.state转换为字符串:'cancelled'

!符号是要转truthy/falsy结果为布尔。这是因为假设tournament.state等于'cancelled'

!tournament.state = !'cancelled' = false 

三重等号操作者然后检查两个类型。您的代码不仅会被TypeScript所厌恶,而且也是不正确的,因为tournament.state的每个值都会使检查失败,因为它总是以针对字符串的布尔值结束。你需要的是:

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

!tournament.state否定tournament.state,不跟随,导致truefalse的那部分,让您true === 'cancelled'false === 'cancelled'. Hence the issue with using ===`一个布尔和字符串===

使用!==

{user && tournament.state !== 'cancelled' && 

技术上讲,你可以使用括号为好,但它不会是地道:

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