ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
>[success] # Interface 与 Type 的区别 ~~~ 1.接口可以重复定义的接口类型,它的属性会叠加,类型别名不行 interface Language { id: number } interface Language { name: string } let lang: Language = { id: 1, // ok name: 'name', // ok } // 如果使用类型别名 /** ts(2300) 重复的标志 */ type Language = { id: number } /** ts(2300) 重复的标志 */ type Language = { name: string } let lang: Language = { id: 1, name: 'name', } ~~~ ~~~ 2.type 可以使用联合类型和交集,interface 不能使用联合类型和交集组合 type Pet = Dog | Cat // 具体定义数组每个位置的类型 type PetList = [Dog, Pet] ~~~ ~~~ 3.type 支持类型映射,interface不支持 type Keys = "firstname" | "surname" type DudeType = { [key in Keys]: string } const test: DudeType = { firstname: "Pawel", surname: "Grzybek" } // 报错 //interface DudeType { // [key in keys]: string //} ~~~ >[info] ## 都允许拓展(extends) interface 和 type 都可以拓展,并且两者并不是相互独立的,也就是说 interface 可以 extends type, type 也可以 extends interface 。 **虽然效果差不多,但是两者语法不同**。 >[danger]#### interface extends interface ~~~ interface Name { name: string; } interface User extends Name { age: number; } ~~~ >[danger]#### type extends type ~~~ type Name = { name: string; } type User = Name & { age: number }; ~~~ >[danger]#### interface extends type ~~~ type Name = { name: string; } interface User extends Name { age: number; } ~~~ >[danger]#### type extends interface ~~~ interface Name { name: string; } type User = Name & { age: number; } ~~~ >[info] ## 总结 interface 只能用于定义对象类型和方法,而 type 的声明方式除了对象之外还可以定义交叉、联合、原始类型等,类型声明的方式适用范围显然更加广泛。 但是interface也有其特定的用处: * interface 方式可以实现接口的 extends 和 implements * interface 可以实现接口合并声明 >[info] ## 参考 [Typescript 中的 interface 和 type 到底有什么区别 ](https://juejin.cn/post/6844903749501059085)