2017-03-26 20 views
6

Sự khác nhau giữa các định nghĩa Kiểu luồng này là gì?Giao diện dòng chảy so với các loại

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

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

Theo như tôi có thể biết, chúng có thể được sử dụng theo cách tương tự.

Trả lời

6

interface s và type s tương tự và sự khác biệt chủ yếu là lịch sử tôi tin. Những thay đổi gần đây để triển khai property variance cũng mang lại hành vi của type nhiều hơn phù hợp với hành vi của interface. Tôi tin rằng mục tiêu là cuối cùng làm cho chúng giống hệt nhau và thậm chí có thể xóa interface.

Có thể vẫn có sự khác biệt nhỏ nhưng đối với hầu hết các lần sử dụng, tôi không nghĩ bạn sẽ nhận thấy sự khác biệt.

Một sự khác biệt lớn ở đây là nếu bạn muốn sử dụng implements (ví dụ class Foo implements Bar {...}) sau đó Bar phải là một interface - không phải là một type. Tuy nhiên, cần lưu ý rằng việc đánh dấu một lớp là triển khai thực hiện một giao diện là không bắt buộc. Flow thực hiện cấu trúc subtyping vì vậy nếu bạn có một cá thể lớp, bạn có thể truyền nó đến một cái gì đó mà mong đợi một tương thích type thậm chí không chỉ rõ rằng lớp thực hiện một giao diện cụ thể.

Các vấn đề liên quan