在 TypeScript 中,interface
和 type
都用來定義自定義類型。它們有一些相似之處,但也有一些區別。
interface
使用 interface
關鍵字來定義,而 type
使用 type
關鍵字來定義。// interface 的定義方式
interface Person {
name: string;
age: number;
}
// type 的定義方式
type Person = {
name: string;
age: number;
}
interface
名稱時,會自動合并聲明,而對于 type
則會報錯。// interface 的合并聲明
interface Person {
name: string;
}
interface Person {
age: number;
}
// type 的合并聲明會報錯
type Person = {
name: string;
}
type Person = {
age: number;
}
interface
可以被類實現,也可以被其他接口繼承,而 type
不具備這些能力。// interface 的實現和繼承
interface Animal {
name: string;
eat(): void;
}
class Dog implements Animal {
name: string;
eat(): void {
console.log('Dog is eating.');
}
}
// interface 的繼承
interface Person {
name: string;
age: number;
}
interface Employee extends Person {
position: string;
}
// type 不能實現和繼承
interface
可以通過交叉類型表示多個類型的組合,而 type
不能。// interface 的交叉類型
interface A {
name: string;
}
interface B {
age: number;
}
type AB = A & B;
// type 不支持交叉類型
綜上所述,interface
適用于定義對象的結構,可以被類實現和其他接口繼承,可以定義交叉類型;而 type
則提供了更強大的類型操作能力,比如聯合類型、交叉類型、類型別名,但不支持類實現和接口繼承。在大多數情況下,可以根據具體需求選擇使用 interface
還是 type
。