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());