基本语法不同
interface主要定义对象形状的,type可以定义任意类型,包括原始类型,联合类型
type user {
name: string;
age:number
}
interface User{
name: string;
age:number
}
扩展方法不同
interface扩展使用的是extends继承
interface Animal {
name: string;
}
interface Dog extends Animal {
breed: string;
}
type使用的是交叉类型 &
type Animal = {
name: string;
};
type Dog = Animal & {
breed: string;
};
合并声明不同
interface同名接口会自动合并成一个
interface User { name: string; }
interface User { age: number; }
// 最终 User = { name: string; age: number }
type同名类型则会报错
灵活性
type支持更复杂的类型表达式
// 联合类型
type ID = string | number;
// 元组
type Point = [number, number];
实现
interface和type都能被类实现
interface User { name: string; }
type User = { name: string };
class User1 implements User { name = 'Alice'; }
class User2 implements User { name = 'Bob'; }
interface Animal {
name: string;
eat(food: string): void;
}
class Dog implements Animal {
name: string; // 必须实现接口属性
constructor(name: string) {
this.name = name;
}
eat(food: string) { // 必须实现接口方法
console.log(`${this.name} eats ${food}`);
}
}