我有一些这样的代码:
/* @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
属性,该属性在上述定义中不存在。