ts中type和interface的区别

127 阅读1分钟

相同点

  1. 定义接口,定义对象或函数
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;

  1. 实现集成 type是通过&(交叉类型)实现,interface是通过extend实现
type Animal = {
   name: string;
}
interface Animal {
   name: string;
}
type Cat = Animal & {
   height: string;
}
interface Dog extends Animal {
   color: string;
}

区别

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