ts 类型别名type和接口interface的区别


 

// 首先说下可以用接口重写类型别名
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 则会报错

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM