type:類型別名案狠;interface:接口钱雷,主要用于類型檢查
差別
1:定義類型范圍
interface只能定義對(duì)象類型。
type可以聲明任何類型罩抗,基礎(chǔ)類型、聯(lián)合類型钞支、交叉類型茫蛹。
// 基礎(chǔ)類型(相當(dāng)于起別名)
type person = 'string';
// 聯(lián)合類型
interface Dog {
name:string
}
interface Cat {
age:number
}
type animal = Dog | Cat;
// 元祖(指定某個(gè)位置具體是什么類型)
type animal = [Dog,Cat];
//交叉類型(多種類型的集合)
type animal = Dog & Cat;
2:合并聲明
定義兩個(gè)同名的type回報(bào)異常;
頂一個(gè)兩個(gè)同名的interface會(huì)合并婴洼;
interface Dog {
name:string;
}
interface Dog {
age:number
}
// 合并為
interface Dog {
name:string;
age:number;
}
3:擴(kuò)展性
interface可以使用extends,和implements,進(jìn)行擴(kuò)展
// interface extends interface
interface Dog {
name:string;
}
interface Cat extends Dog {
age:number;
}
// interface extends type
type Dog= {name:string};
interface Cat extends Dog {
age:number;
}
但type可以使用交叉類型&進(jìn)行合并
// type & type
type Dog = {name:string};
type Cat = {age:number} & Dog;
// tyep & interface
interface Dog {
name:string;
}
type Cat = {age:number} & interface;
4:可以使用typeof獲取實(shí)例對(duì)象類型
const div = document.createElement('div');
type B = typeof div;