如何制作只能包含流中某些属性的类型?

时间:2016-09-29 16:32:17

标签: javascript flowtype

我有一些像这样的代码:

/* @flow */

type Options = {
  userdir?: string,
}

function foo(options: Options) {
  return 'foo';
}

foo({userDir: 'bar'});

我预计流量会在此警告我,我的选项类型中没有属性userDir。但根据流式检查器,这段代码完全没问题。如何制作只能在流程中具有某些属性的类型?

1 个答案:

答案 0 :(得分:3)

在您的代码段中,您要声明一个可选属性,因此Flow不会抱怨。

如果您需要Flow告诉您缺少的属性,则需要删除问号:

type Options = {
    userdir: string;
};

如果您需要定义该属性,但也允许它为null或未定义,则可以使用' maybe type' :

type Options = {
    userdir: ?string;
};

编辑我们在Reactiflux上讨论了这个问题,结果显示Flow(截至0.32)刚刚添加了Exact类型:

type Options = {|
    userdir: ?string;
|};

使用此语法,在调用foo({userDir: 'bar'});时,Flow会抱怨userDir属性,这在上面的定义中不存在。