流接口与对象类型别名

Mar*_*ann 13 interface flowtype

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

interface Vehicle {
  start(): void,
  stop(): void
}
Run Code Online (Sandbox Code Playgroud)
type Vehicle = {
  start(): void,
  stop(): void
};
Run Code Online (Sandbox Code Playgroud)

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

Nat*_*ote 12

interfaces和types相似,差异主要是历史我相信.最近实施属性差异的变化也带来了type更符合行为的行为interface.我相信目标是最终使它们相同甚至可能删除interface.

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

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