2017-03-26 37 views
6

這些流體類型定義之間有什麼區別?流體界面與類型

interface Vehicle { 
    start(): void, 
    stop(): void 
} 

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

據我所知,他們可以用同樣的方式。

回答

6

interface s和type s是相似的,並且差異大多是歷史我相信。最近執行property variance的更改也使type的行爲更符合interface的行爲。我相信目標是最終使它們相同,甚至可能刪除interface

可能仍然存在細微差別,但對於大多數用途,我不認爲您會注意到不同之處。

一個主要的區別是,如果你想使用implements(例如class Foo implements Bar {...})然後Bar必須是interface - 不是type。但值得注意的是,將類標記爲實現接口並不是強制性的。 Flow實現了結構化子類型化,所以如果你有一個類實例,你可以將它傳遞給一個兼容的應用程序,即使沒有明確指出這個類實現了一個特定的接口。