TypeScript中的类型别名(Type Alias) 和 接口(Interface) 都是用来自定义类型的工具,但他们在语法和使用场景上有一些区别。
-  扩展和合并 - 类型别名:不能直接扩展和合并,但可以通过交叉类型来实现类似的效果。
 type Point3D = Point & {z: number}- 接口:可以扩展其他接口。
 interface Point3D extends Point {z: number; } interface Point {x: numbery: number }
-  使用场景 - 类型别名:适用于定义联合类型、交叉类型、元组等复杂类型。
 type StringOrNumber = string | number type TupleType = [string, number]- 接口:适用于定义对象形状,特别是在面向对象编程中定义类和对象的接口。
 interface Person {name: stringage: number }
-  实现和继承 - 类型别名:不能被实现
- 接口:可以被类实现
 class MyPoint implements Point {x: numbery: number }
-  字面量类型 - 类型别名:可以定义字面量类型
 type Direction = 'N' | 'S' | 'E' | 'W'- 接口:不能定义字面量类型
 
-  工具类型 - 类型别名:可以定义工具类型
 type Partial<T> = {[P in keyof T]?: T[P]; };- 接口:不能定义工具类型
 
总结
- 类型别名:适用于定义复杂类型、联合类型、交叉类型、元组等,但不能被类实现。
- 接口: 适用于定义对象的形状,特别是在面向对象编程中定义类和对象的接口,可以被类实现,可以扩展和合并