// 首先说下可以用接口重写类型别名
type People = { name: string age: number } // 可以重写为下面这个接口 interface People { name: string age: number } // 现在二者完全一样,任何使用类型别名 People 的地方都可以使用接口 People
// 第一个区别 // 类型别名右边可以是多种类型,包括类型、|、&等 type A = number; type B = A | string // 接口只能为类型 interface A { name: string }
// 第二个区别 // 扩展接口时会检查是否可被赋值 interface A { func(x: number): number } interface B extends A{ func(x: string): string } // 如果 B 继承 A 会报错 // 而如果把接口写成类型别名,extends 换成 & 则不会报错,别名会重载这个 func
// 第三个区别 // 同一作用域下的多个同名接口会自动合并,而类型别名则会报错,这个就是声明合并 interface People{ name: string } interface People{ age: number } // People在同一作用下会合并如下 interface People{ name: string age: number } // 如果将 interface 换成 type 则会报错