type:类型别名;interface:接口,主要用于类型检查
差别
1:定义类型范围
interface只能定义对象类型。
type可以声明任何类型,基础类型、联合类型、交叉类型。
// 基础类型(相当于起别名)
type person = 'string';
// 联合类型
interface Dog {
name:string
}
interface Cat {
age:number
}
type animal = Dog | Cat;
// 元祖(指定某个位置具体是什么类型)
type animal = [Dog,Cat];
//交叉类型(多种类型的集合)
type animal = Dog & Cat;
2:合并声明
定义两个同名的type回报异常;
顶一个两个同名的interface会合并;
interface Dog {
name:string;
}
interface Dog {
age:number
}
// 合并为
interface Dog {
name:string;
age:number;
}
3:扩展性
interface可以使用extends,和implements,进行扩展
// 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可以使用交叉类型&进行合并
// type & type
type Dog = {
name:string};
type Cat = {
age:number} & Dog;
// tyep & interface
interface Dog {
name:string;
}
type Cat = {
age:number} & interface;
4:可以使用typeof获取实例对象类型
const div = document.createElement('div');
type B = typeof div;