一,概念:
1.接口(Interface)
接口主要用於類型檢查,它只是一個結構契約,定義了具有相似的名稱和類型的對象結構。除此之外,接口還可以定義方法和事件。
2.類型別名(Type Alias)
不同於interface只能定義對象類型,type聲明還可以定義基礎類型、聯合類型或交叉類型。
二,差異點:
1.定義類型范圍
interface只能定義對象類型, 而type聲明可以聲明任何類型,包括基礎類型、聯合類型或交叉類型。
// 基本類型 type person = string // 聯合類型 interface Dog { name: string; } interface Cat { age: number; } type animal = Dog | Cat // 元組類型 interface Dog { name: string; } interface Cat { age: number; } type animal = [Dog, Cat]
2.擴展性
接口可以extends、implements,從而擴展多個接口或類。類型沒有擴展功能。
// interface extends interface interface Person { name: string } interface User extends Person { age: number } // interface extends type type Person = { name: string } interface User extends Person { age: number }
type可以使用交叉類型&,來使成員類型合並
// type & type type Person = { name: string } type User = Person & { age: number } // type & interface interface Person { name: string } type User = {age: number} & Person
3.合並聲明
定義兩個相同名稱的接口會合並聲明。
定義兩個同名的type會出現異常。
interface Person { name: string } interface Person { age: number } // 合並為:interface Person { name: string age: number}
4.typeof
type可以使用typeof獲取實例類型
let div = document.createElement('div'); type B = typeof div