定义方式
- 接口(interface):使用
interface
关键字定义。例如:
interface User {
name: string;
age: number;
}
- 类型别名(type alias):使用
type
关键字定义。例如:
type UserType = {
name: string;
age: number;
};
功能特性
interface User {
name: string;
}
interface User {
age: number;
}
// User 接口现在有 name 和 age 属性
- 主要用于定义对象的形状(shape),对类有更强的约束,类可以实现接口。例如:
interface Animal {
speak(): void;
}
class Dog implements Animal {
speak() {
console.log('Woof!');
}
}
- 类型别名(type alias):
- 不能重复声明,否则会报错。
- 功能更通用,可以用于定义基本类型、联合类型、交叉类型等。例如:
// 定义联合类型
type StringOrNumber = string | number;
// 定义交叉类型
type Admin = { role: 'admin' } & UserType;
使用场景
- 接口(interface):
- 当你专注于定义对象的结构,特别是在面向对象编程中,类需要实现特定的契约时,接口是很好的选择。比如定义 API 数据的形状,或者定义类应该遵循的规范。
- 团队中习惯使用接口来描述对象结构,以保持代码风格的一致性。
- 类型别名(type alias):
- 当需要定义更复杂的类型,如联合类型、交叉类型时,类型别名更为方便。
- 对于基本类型的别名定义,类型别名也很适用,能提高代码的可读性,例如给特定含义的数字类型定义别名。