如何对类型的构造函数参数进行flowtype接口的严格类型检查?

时间:2016-11-11 19:21:18

标签: javascript flowtype

使用接口作为构造函数的参数时,是否可以进行更严格的编译时检查?默认行为似乎太宽松了。

例如给出以下类:

// @flow
'use strict';

import type { Bar } from './bar';

export default class Foo {

   _bar: Bar;
   _name: string;

   constructor (bar: Bar, name: string) {
     this._bar = bar;
     this._name = name;
   }
}

以下界面定义了以下界面:

// @flow
'use strict';

export interface Bar {
  doSomething(someArg: string);
}

如果我用某种原始类型创建一个无效的Foo实例,我将收到一个错误:

// In any of these flowtype checking works and fails because 
// it knows those things are not Bar.

new Foo('bar', 'someName'); 
new Foo(1, 'someName');
new Foo({}, 'someName');

但是,如果我这样做傻话:

new Foo(new Function(), 'someName');

flowtype对此感到非常满意,这种情况甚至打败了甚至首先定义了界面的目的。如果我可以传入任何类型的实例对象,并且flowtype没有看到传入的内容与接口不匹配,则应该像{}那样抛出错误。

是否需要更改某些配置或我做错了什么?

修改

我认为这可能是一个错误,并提交了issue

1 个答案:

答案 0 :(得分:0)

显然是a known issue

因为它现在是函数实例属性类型any,即使它们未定义。 :(

我的问题因重复而被关闭。这解释了我的问题中的问题。