我有一些这样的代码:

/* @flow */

type Options = {
  userdir?: string,
}

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

foo({userDir: 'bar'});


我希望这里的流程会警告我,我的“选项”类型中没有属性userDir。但是根据流类型检查器,此代码完全正确。如何制作只能在流中具有某些属性的类型?

最佳答案

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

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

type Options = {
    userdir: string;
};


如果您需要定义该属性,但又允许其为null或未定义,则可以使用“也许类型”:

type Options = {
    userdir: ?string;
};




编辑:我们在Reactiflux上讨论了这一点,原来是Flow(从0.32开始)只是添加了Exact类型:

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


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

09-20 03:53