TS中interface和type的區別
阿新 • • 發佈:2022-12-05
1.概念
1.介面(interface)
介面主要用於型別檢查,他只是一個結構契約,定義了具有相似的名稱和型別的物件結構。除此之外,介面還可以定義方法和事件。
2.類型別名(Type Alias)
不同與intetrface只能定義物件型別,type宣告還可以定義基礎型別,聯合宣告或交叉型別。
2.差異點
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