这些Flow类型定义有什么区别?
interface Vehicle {
start(): void,
stop(): void
}
type Vehicle = {
start(): void,
stop(): void
};
据我所知,它们可以以相同的方式使用。
interface
s和type
s是相似的,差异主要是历史我相信。最近实施property variance的变化也使type
的行为更加符合interface
的行为。我相信目标是最终使它们相同甚至可能删除interface
。
可能仍然存在细微差别,但对于大多数用途,我认为您不会注意到差异。
一个主要的区别是,如果你想使用implements
(例如class Foo implements Bar {...}
),那么Bar
必须是interface
- 而不是type
。但是值得注意的是,将类标记为实现接口并不是强制性的。 Flow实现结构子类型,因此如果你有一个类实例,你可以将它传递给需要兼容的type
的东西,即使没有明确指出该类实现了特定的接口。