相同点
- 定义接口,定义对象或函数
interface Person {
name: string;
age: number;
}
interface ExampleFunction {
(name:string,age: number):void
}
type Example = {
name: string;
age: number;
}
type Example = (name: string, age: number) => void;
- 实现集成 type是通过&(交叉类型)实现,interface是通过extend实现
type Animal = {
name: string;
}
interface Animal {
name: string;
}
type Cat = Animal & {
height: string;
}
interface Dog extends Animal {
color: string;
}
区别
- type可以声明基本类型,相当于为原始类型起一个类型别名,而interface不可以,比如
type NameType = string
type Person {
name: NameType;
age: number;
} NameType可以用作string类型
- type可以声明交叉类型和联合类型
type A = A1 | A2 联合类型
type B = B1 & B2 交叉类型
- type可以声明元祖类型( 固定大小的不同类型值的集合 ,元祖类型是数组类型的变种,是固定数量的不同类型元素的组合,元素和集合的区别是元祖的元素类型不同但是数量是固定的)
type Data = [ number, string];
- interface 可以重复定义会进行声明的合并,type不可以,type一旦定义就不能再添加新的属性,并且type重复定义会报错,interfac可以扩展,重复定义不会报错
interface Person {
name: string;
}
interface Person {
age: string;
}
所以实际上Person是
interface Person {
name: string;
age: string;
}