一、interface(接口)
interface主要用于描述对象的形状,即一组必须遵循的属性和方法的集合。用于类型检查,interface只能用于定义对象类型
interface Person {
name: string;
age: number;
getName(): string;
}
二、type(类型别名)
类型别名主要用于为任何类型创建新名称。type可用于任何类型
type Age = number;
type Name = string;
type PersonInfo = {
name: Name;
age: Age;
};
三、主要区别
1.interface可声明合并,type不行
1.interface多次定义接口和合并声明
interface Person { name: string }
interface Person { age: number }
// 合并后: { name: string; age: number }
2.type重复定义会报错
type PersonInfo = {
name: Name;
age: Age;
};
type PersonInfo = {
address: string;
};
//报错PersonInfo声明重复
2.扩展方式不同
1.interface使用extends扩展
interface Person {
name: string;
age: number;
getName(): string;
}
//在已有Person声明的方法和属性外,扩展了一个方法
interface Person1 extends Person {
getAge(): string;
}
2.type通过交叉类型&扩展
type PersonInfo = {
name: Name;
age: Age;
};
type PersonInfo1 = PersonInfo & { address: string };
3.适用范围
interface主要适用于对象类型,包括类、函数、数组
type适用于任何类型,包括原始类型、两个类型、元组
type ID = string | number; // 联合类型
type Coordinates = [number, number]; // 元组
4.实现类
implements用于实现接口(可多实现),需强制实现接口中非可选的属性和方法
1.interface可被类实现implements,必须实现类
interface Person {
name?: string;
age: number;
getName(): string;
}
//由于name可选,所以类可以不实现
class Person2 implements Person {
age: number;
getName(): string {
return '';
}
}
2.type不能被类实现,除非为对象类型
type Person3 = {
name?: string;
age: number;
getName(): string;
};
class Person2 implements Person3 {
age: number;
getName(): string {
return '';
}
}
1024

被折叠的 条评论
为什么被折叠?



