在这种情况下,如何重用类声明而不复制粘贴类定义的所有成员?
declare type A {
a: string;
}
class A extends EventEmitter {
foo() {
this.a // error property not found
}
}
我以为 Flow 会识别出 class
A 是 type
A 的实例,但事实并非如此。
最佳答案
我认为您误解了 Flow 中 type
的含义。
首先,在您的代码中有两个名为 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
的接口(interface):
const t: T = new C(); // this is now ok
您最初的问题是关于避免属性重复。 Flow 不提供用于定义类的额外快捷方式,但它确实提供了用于定义类型的快捷方式,通过 mixins 。但是,我认为它不会完全满足您的要求。您将能够执行以下操作:
declare class SharedProps {
a: number;
}
declare class A mixins SharedProps {
b: string;
}
但是,这只会声明类型,而不是实现。您仍然需要在某个地方实现这些类,这可能不会为您节省太多精力。
关于javascript - 重用流类声明进行类定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41662696/