不允许在给定的流类型上使用不存在的密钥

时间:2017-11-18 00:24:13

标签: javascript typescript flowtype

给出这个简单的对象:{ id: 'x', value: 1 },在TypeScript中尝试:

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');
}

2 个答案:

答案 0 :(得分:1)

您的问题仍然是一个悬而未决的问题。 https://github.com/facebook/flow/issues/106

只要该问题处于打开状态,您就可以强制执行将bar.xyz类型转换为布尔值。

if (Boolean(bar.xyz))

您将收到此错误。

  

10:if(Boolean(bar.xyz)){                        ^ property xyz

中找不到的属性      

10:if(Boolean(bar.xyz)){                   ^对象类型

答案 1 :(得分:0)

Flow始终允许if中的属性检查。您可以将其用作解决方法:

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