面試官:Typescript中的Iinterface與Type的區別?
作者:dev
兩者在描述對象時有很多相似之處,但 ??interface?? 更偏向于面向對象的設計和擴展,而 ??type?? 則在類型組合和別名方面更靈活。選擇哪一個主要取決于你的具體需求和團隊的編碼風格。
在 TypeScript 中,interface 與 type 都可以用來描述對象的形狀,但它們之間存在一些關鍵區別:
聲明合并(Declaration Merging)
- interface:支持聲明合并。你可以在多個地方聲明同一個接口,TypeScript 會將它們合并成一個接口。例如:
interface Person {
name: string;
}
interface Person {
age: number;
}
// Person 合并后等同于 { name: string; age: number; }
- type:不支持聲明合并。重復聲明同一個類型別名會報錯。
表達能力
- interface:主要用于描述對象的結構(屬性、方法等),適合面向對象的設計模式。
- type:不僅可以描述對象,還可以定義聯合類型、交叉類型、原始類型別名、元組等。例如:
type ID = number | string;
type Coordinates = [number, number];
擴展方式
- interface:可以通過 extends 關鍵字繼承其他接口,支持接口的擴展和實現。
interface Animal {
name: string;
}
interface Dog extends Animal {
breed: string;
}
- type:雖然不能直接使用 extends,但可以通過交叉類型實現類似擴展的效果:
type Animal = { name: string };
type Dog = Animal & { breed: string };
用途和選擇
- 如果主要用于定義對象的結構,并希望利用聲明合并或面向對象的特性,建議使用 interface。
- 如果需要更強的表達能力,比如定義聯合類型、元組等,或者希望用一種統一的方式描述多種類型,則可以選擇 type。
總結來說,兩者在描述對象時有很多相似之處,但 interface
更偏向于面向對象的設計和擴展,而 type
則在類型組合和別名方面更靈活。選擇哪一個主要取決于你的具體需求和團隊的編碼風格。
責任編輯:姜華
來源:
大遷世界