// 首先說下可以用接口重寫類型別名
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 則會報錯