个人的奋斗还是历史的进程?
by
type即是类型别名,区别主要在于继承、被类实现、重新声明
看一个交叉类型的声明
interface InterfaceA {
id: number;
name: string;
}
interface InterfaceB {
id: string;
age: number;
}
type C = InterfaceA & InterfaceB
这种场景下C的id属性会被声明为never类型
在TypeScript中,type和interface都可以用来定义类型,但它们之间存在一些差异和各自的用途:
interface可以使用extends关键字来实现继承,可以继承多个接口。type可以使用&操作符来合并多个类型,但不是继承关系。interface支持多继承,一个接口可以继承多个其他接口。type不支持多继承,但可以通过交叉类型与其它类型组合。interface可以被重新声明(declaration merging),这意味着你可以在不同的文件中多次声明同一个接口,并且这些声明会被合并。type不允许重新声明,每个类型名称必须是唯一的。interface可以被类实现(implement),这是定义共享结构的一种方式。type不能被类实现,但可以在类中使用类型别名。interface中的属性默认都是可选的,除非它们被赋值了。type定义的属性默认都是必需的。interface支持索引签名,允许你定义一个对象,该对象的属性名是动态的,但类型是相同的。type也支持索引签名。interface可以包含构造函数签名。type也可以包含构造函数签名。interface来定义公共API,以便其他库可以通过implements来扩展这些API。type更多地用于在应用程序代码中定义具体的类型。type可以很容易地与联合和交叉类型结合使用,因为它们都是使用相同的类型别名系统。interface不能直接与联合和交叉类型结合使用,需要使用类型断言或类型守卫。type可以为联合、交叉、元组等复杂类型提供别名,这在处理复杂类型时非常有用。在实际开发中,选择使用type还是interface通常取决于个人或团队的偏好,以及具体的使用场景。例如,如果你需要定义一个可以被多个类实现的结构,interface可能是更好的选择。如果你需要定义一个复杂的联合类型,type可能更合适。