type 和 interface 的區(qū)別

相同點

1.都可以用來描述一個對象或者函數(shù)

// 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;

2.拓展(extends)與 交叉類型(Intersection Types)

interface 可以 extends, 但 type 是不允許 extends 和 implement 的,但是 type 缺可以通過交叉類型 實現(xiàn) interface 的 extend 行為,并且兩者并不是相互獨立的,也就是說 interface 可以 extends type, type 也可以 與 interface 類型 交叉 。
雖然效果差不多,但是兩者語法不同。

// interface extends interface
interface Name {
  name: string;
}
interface User extends Name {
  age: number;
}

// type 與 type 交叉
type Name = {
  name: string;
}
type User = Name & { age: number  };

// interface extends type
type Name = {
  name: string;
}
interface User extends Name {
  age: number;
}

// type 與 interface 交叉
interface Name {
  name: string;
}
type User = Name & {
  age: number;
}

不同點

1.type可以而interface不行

type 可以聲明基本類型別名,聯(lián)合類型,元組等類型

// 基本類型別名
type Name = string

// 聯(lián)合類型
interface Dog {
    wong();
}
interface Cat {
    miao();
}

type Pet = Dog | Cat

// 具體定義數(shù)組每個位置的類型
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> };

2.interface可以而type不行

interface 能夠聲明合并

interface User {
  name: string
  age: number
}

interface User {
  sex: string
}

/*
User 接口為 {
  name: string
  age: number
  sex: string
}
*/

總結(jié)

一般來說,如果分不清楚什么時候用interface/type,可以遵循一個簡單的規(guī)則:能用 interface 實現(xiàn),就用 interface , 如果不能就用 type 。
更多詳情請移步官方文檔

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容