interface
interface 是用來定義物件的形態,特別是物件的屬性和函數簽名。
繼承
通常使用 extends 關鍵字來繼承其他 interface,例如:
除了繼承其他 interface 中的屬性和函數外,繼承 interface 還會繼承其他 interface 中的泛型定義, 例如
type
type 可以定義所有類型,包括物件、函數、類別、陣列、元組、和別名。
繼承
在 TypeScript 中,type 並不能像 interface 一樣繼承其他 type,type 只能繼承單一的 type。
如果你想要像 interface 一樣繼承多個 type 的話,可以使用 Union Types 和 Intersection Types 這兩種類型,來合併多個類型並定義新型別。
Union Types
是多個類型的組合,它允許變數接受多種類型中的一種,如下所示:
Intersection Types
是多個類型的交集,它允許變數接受多種類型中的所有類型,如下所示:
這兩種類型,都可以解決繼承多個 type 的需求, 但是還是有些不同
Union Types 是指變數可以是多種類型之一
Intersection Types 指的是變數需要同時具有多種類型的屬性。
兩者差異
- 使用 interface 可以定義一個物件具有那些屬性,屬性的型別。而 type 更廣泛,可以指定任何類型。
- 在繼承上也有差異, 使用 interface 可以繼承多個 interface ,而 type 只能繼承單一的 type
我們會用 interface 定義物件型別和函數型別,而 type 則常用於定義型別別名,例如: