如果没有复制粘贴类定义的所有成员,我如何在这种情况下重用我的类声明?
declare type A {
a: string;
}
class A extends EventEmitter {
foo() {
this.a // error property not found
}
}
我认为流会认识到class
A是type
A的一个实例,但它没有。
答案 0 :(得分:4)
我认为你误解了type
在Flow中的含义。
首先,在您的代码中有两个名为A
的东西,它们是重叠的。让我们重命名它们,这样我们就可以正确地谈论它们了:
type T {
a: string;
}
此处,T
是任何具有名为a
的属性的Javascript对象,是一个数字。
class C extends EventEmitter {
foo() {
this.a // error property not found
}
}
C
是您的类的名称,但也是 Flow已经创建了一个相同名称的类型,它是C
或C
实例的所有对象的类型C
的子类。 a
没有T
属性,因此错误是预期的。您无法将其变为T
,因为不是T
的 。将其设为a: number
的唯一方法是为其提供class C extends EventEmitter {
a: number;
foo() {
this.a
}
}
属性:
C
现在T
的任何实例也是T
,因为它符合const t: T = new C(); // this is now ok
的界面:
classes
您最初的问题是避免重复属性。 Flow并未提供用于定义declare class SharedProps {
a: number;
}
declare class A mixins SharedProps {
b: string;
}
的其他快捷方式,但它确实提供了通过mixins定义类型的快捷方式。但是,我不认为它会完全符合您的要求。您将能够执行以下操作:
position_stack
但是,这只会声明 types ,而不是实现。你仍然需要在某个地方实现这些类,这可能不会为你节省太多的精力。