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