1. 程式人生 > 其它 >TS中interface和type的區別

TS中interface和type的區別

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