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