流接口与对象类型别名

时间:2017-03-26 01:26:00

标签: interface flowtype

这些Flow类型定义有什么区别?

interface Vehicle {
  start(): void,
  stop(): void
}
type Vehicle = {
  start(): void,
  stop(): void
};

据我所知,它们可以以相同的方式使用。

1 个答案:

答案 0 :(得分:11)

interfacetype s相似,差异主要是历史我相信。最近实施property variance的更改也使type的行为更符合interface的行为。我相信目标是最终使它们相同,甚至可能删除interface

可能仍然存在微妙的差异,但对于大多数用途,我认为您不会注意到差异。

一个主要区别是,如果您想使用implements(例如class Foo implements Bar {...}),那么Bar必须是interface - 而不是type。但是值得注意的是,将类标记为实现接口并不是强制性的。 Flow实现结构子类型,因此如果你有一个类实例,你可以将它传递给期望兼容type的东西,即使没有明确指出该类实现了特定的接口。