Typescript 中的 interface 和 type 的區(qū)別

interface VS type

大家使用 typescript 總會使用到 interface 和 type,官方規(guī)范 稍微說了下兩者的區(qū)別

  • An interface can be named in an extends or implements clause, but a type alias for an object type literal cannot.
  • An interface can have multiple merged declarations, but a type alias for an object type literal cannot.

但是沒有太具體的例子。

明人不說暗話,直接上區(qū)別。

相同點

都可以描述一個對象或者函數

interface

|

interface User {

name: string

age: number

}

interface SetUser {

(name: string, age: number): void;

}

|

type

|

type User = {

name: string

age: number

};

type SetUser = (name: string, age: number): void;

|

都允許拓展(extends)

interface 和 type 都可以拓展,并且兩者并不是相互獨立的,也就是說 interface 可以 extends type, type 也可以 extends interface 。 雖然效果差不多,但是兩者語法不同。

interface extends interface

|

interface Name {

name: string;

}

interface User extends Name {

age: number;

}

|

type extends type

|

type Name = {

name: string;

}

type User = Name & { age: number };

|

interface extends type

|

type Name = {

name: string;

}

interface User extends Name {

age: number;

}

|

type extends interface

|

interface Name {

name: string;

}

type User = Name & {

age: number;

}

|

不同點

type 可以而 interface 不行

  • type 可以聲明基本類型別名,聯合類型,元組等類型

|

// 基本類型別名

type Name = string

// 聯合類型

interface Dog {

wong();

}

interface Cat {

miao();

}

type Pet = Dog | Cat

// 具體定義數組每個位置的類型

type PetList = [Dog, Pet]

|

  • type 語句中還可以使用 typeof 獲取實例的 類型進行賦值

|

// 當你想獲取一個變量的類型時,使用 typeof

let div = document.createElement(``'div'``);

type B = typeof div

|

  • 其他騷操作

|

type StringOrNumber = string | number;

type Text = string | { text: string };

type NameLookup = Dictionary<string, Person>;

type Callback<T> = (data: T) => void;

type Pair<T> = [T, T];

type Coordinates = Pair<number>;

type Tree<T> = T | { left: Tree<T>, right: Tree<T> };

|

interface 可以而 type 不行

interface 能夠聲明合并

|

interface User {

name: string

age: number

}

interface User {

sex: string

}

/*

User 接口為 {

name: string

age: number

sex: string

}

*/

|

總結

一般來說,如果不清楚什么時候用interface/type,能用 interface 實現,就用 interface , 如果不能就用 type 。其他更多詳情參看 官方規(guī)范文檔

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容