Javascript 如何使用流类型提示和Jest处理错误

Javascript 如何使用流类型提示和Jest处理错误,javascript,jestjs,flowtype,Javascript,Jestjs,Flowtype,我有一个这样定义的类: class MyClass{ constructor(data:Array<any>){ ... } } test('bad args', () => { expect(new MyClass()).toThrow(); expect(new MyClass({})).toThrow(); expect(new MyClass('string')).toThrow(); }); 我希望这些都会出错,因为类型暗示不允许空构

我有一个这样定义的类:

class MyClass{
  constructor(data:Array<any>){
    ...
  }
} 
test('bad args', () => {
  expect(new MyClass()).toThrow();
  expect(new MyClass({})).toThrow();
  expect(new MyClass('string')).toThrow();
});
我希望这些都会出错,因为类型暗示不允许空构造函数参数,并且希望第一个参数是数组而不是对象或字符串

谁能解释一下我是如何说服Jest在类型不正确的情况下通过流和错误运行代码的

编辑: 我还运行了
flow-typed安装jest@23.6.0//正确的jest版本

Babel将获取您的流代码并去掉任何类型注释

所以,flow可以帮助您在构建之前(通常在开发时,在ide中)找到错误的调用。一旦在项目中运行
flow
,您就可以发现签名不匹配的地方

删除编译流注释后,您就拥有了纯javascript

因此,如果构造函数接受
any
arg,但只有数组是有效的,则可以显式声明:

class MyClass {
  constructor(data:*) {
    if (!Array.isArray(data)) {
       throw new Exception('Bad argument');
    }
  }
}

如果您也指定了
data:Array
,那么上述代码库也可以工作,但是您会在编译时看到错误(这样您就可以找出应该责备的人:)。

谢谢,这很有道理-我没有仔细考虑过