【问题标题】:Flow interfaces versus object type aliases流接口与对象类型别名
【发布时间】:2017-08-18 20:01:47
【问题描述】:

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

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

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

【问题讨论】:

    标签: interface flowtype


    【解决方案1】:

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

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

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

    【讨论】:

    • 请注意,在流 v0.89.0 中似乎出现了某种回归,其中 type 突然没有以相同的方式强制执行:[flow.org/try/… 更改为 v0.88.0 按预期工作。
    猜你喜欢
    • 1970-01-01
    • 2017-04-10
    • 2010-11-08
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多