Javascript 如何使用对象伪造类实例(并且仍然让flowtype验证接口)?

Javascript 如何使用对象伪造类实例(并且仍然让flowtype验证接口)?,javascript,typing,flowtype,Javascript,Typing,Flowtype,我有 如果在我的测试中,我现在为它创建了一个假的或双精度的,它满足相同的接口,所以我可以将它注入到我想要测试的某个地方,例如,像这样 class A { func() {} } flowtype将在以下情况中抱怨类型不兼容,一个是对象my fake,另一个是类A的实例 制造这样的假货更容易测试,特别是当它变得更复杂时。有没有办法不进行类型检查?通常,如果我需要创建用于测试的假货,我只需通过任何不安全的测试,但嘿,这是一个测试: const toBeTested = (a: A) =&g

我有

如果在我的测试中,我现在为它创建了一个假的或双精度的,它满足相同的接口,所以我可以将它注入到我想要测试的某个地方,例如,像这样

class A {
   func() {}
}
flowtype将在以下情况中抱怨类型不兼容,一个是对象my fake,另一个是类A的实例


制造这样的假货更容易测试,特别是当它变得更复杂时。有没有办法不进行类型检查?

通常,如果我需要创建用于测试的假货,我只需通过任何不安全的测试,但嘿,这是一个测试:

 const toBeTested = (a: A) => {}

 const testFunction = () => { toBeTested(fakeAInstance) };
                                         ^^^^^^^^^^^^^ is an object, not of type `A`
这样,除了这一点,你仍然可以在任何地方进行打字检查。在其他地方,Flow认为fakeAInstance具有类型A。

如果您的toBeTested函数实际上需要一个类的实例,那么您必须提供它。如果它仅依赖于其接口,则应声明其类型并将其用作注释:

const fakeAInstance: A = (({ func: () => 0 }): any)
您仍然可以使用类来实现类型T:


您可以使用接口,该接口适用于类和对象:

const instance: T = new A();

它对我来说是通过的,从flow-0.36开始,我认为这是不正确的,对吗?{func:=>void 0;}应该是{func:=>0,}
type T = {
  func(): void
}

 const toBeTested = (a: T) => {}
const instance: T = new A();
interface MyIntf {
  func(): void;
}

class A {
  func(): void {}
}

class B extends A {}

const o = {func: ():void => undefined};

function f(val: MyIntf) {
  val.func();
}

f(o);

f(new A());

f(new B());