🗒️typescript中type与interface区别
type
status
date
slug
summary
tags
category
icon
password
Blocking
Blocked by
top
URL
Sub-item
Parent item
总结
Interface 和 Type 核心的区别是 Type 不可在定义后重新添加内容,而 Interface 则总是可以扩展新内容。相比 Interface,Type 并没有实际创建一个新的类型,而是创建一个引用某个类型的名字。
如果有复杂的类型运算,那么没有其他选择只能使用 type;一般情况下,interface 灵活性比较高,便于扩充类型或自动合并,建议优先使用。
表示类型
- Type 可以表示非对象类型。
- Interface 只能表示对象类型。
扩展
- Interface 支持继承其他接口,但extends 中的同名字段的类型必须是兼容的。
- Type 可以使用联合类型,出现了同名字段且类型不同时,则类型一般是 never。
声明合并
- Interface 可以声明合并,当同名的接口定义时,它们会自动合并。
- Type 不支持声明合并,当重复定义别名时会报错。
扩展
- Interface不能声明原始数据类型。
- Type 可以扩展原始数据类型。
属性映射
- Interface 的索引值必须是 string 或 number 类型,所以 Interface 并不支持动态生成属性。
- Type 可以使用 in 关键字动态生成属性