2017-11-18 115 views
4

给出这个简单的使用对象不存在的键:{ id: 'x', value: 1 },在打字稿如果你尝试这样做:不允许在给定的流式

type foo = { 
    id: string, 
    v: number, 
}; 

const bar: foo = { id: 'something', v: 1111 }; 

// refrencing non existent key 
if (bar.xyz) { 
    console.log('xyz'); 
} 

,你会得到一个错误说xyz does not exist on foo。你如何得到相同的结果Flowjs

我试过以下,但flowjs不抛出任何错误:

type foo = {| 
    id: string, 
    v: number, 
|}; 

const bar: foo = { id: 'something', v: 1111 }; 


if (bar.xyz) { // no errors 
    console.log('xyz'); 
} 

回答

0

流量始终允许在if的财产检查。您可以使用此作为解决方法:

if (!!bar.xyz == true) { 
+0

或'如果(!bar.xyz)' – James

+1

@詹姆斯不正确地发出一个错误按照要求 –

+0

@RyanCavanaugh是读完这个问题后,你会发现你试图强制一个错误 - 当你看到像'== true'这样的代码时自动驾驶。我以前从未使用Flowjs,但我认为它的类型强制会引发错误。 – James

1

您的问题仍然存在作为一个未解决的问题。 https://github.com/facebook/flow/issues/106

只要这个问题是开放的,你可以强制做类型转换bar.xyz布尔。

if (Boolean(bar.xyz))

您将收到此错误。

10:if(布尔(bar.xyz)){ ^属性xyz。物业在

10未发现:如果(布尔(bar.xyz)){ ^对象类型

+0

真是令人惊讶!我坚持(暗暗希望)我使用了flowjs错误,并且有办法让这个工作无需做类型转换 – ke3pup