特性 | 类型别名 (type ) |
接口 (interface ) |
---|---|---|
声明方式 | type Name = ... |
interface Name { ... } |
适用类型 | 任意类型(原始值、联合、元组等) | 主要对象类型 |
扩展方式 | 交叉类型 & |
extends 继承 |
实现(implements) | 类可实现 | 类可实现 |
合并声明 | ❌ 不允许 | ✅ 自动合并同名接口 |
计算属性 | ✅ 支持 | ❌ 不支持 |
映射类型 | ✅ 支持 | ❌ 不支持 |
性能 | 更适合复杂类型操作 | 更适合对象结构定义 |
// 使用 type
type PersonT = {
name: string;
age: number;
};
// 使用 interface
interface PersonI {
name: string;
age: number;
}
class Student implements PersonT, PersonI {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
// type 扩展
type EmployeeT = PersonT & { jobTitle: string };
// interface 扩展
interface EmployeeI extends PersonI {
jobTitle: string;
}
类型别名可以定义任何类型,而接口主要用于对象类型:
// 原始类型别名
type ID = string | number;
// 元组类型
type Point = [number, number];
// 联合类型
type Status = 'active' | 'inactive';
// 这些用interface无法实现
接口支持自动合并,类型别名会报错:
interface User {
name: string;
}
interface User {
age: number;
}
// 最终 User 接口包含 name 和 age
const user: User = { name: 'Alice', age: 30 };
// type 会报错
type UserT = { name: string };
type UserT = { age: number }; // ❌ 错误:重复标识符
interface
当:interface Serializable {
serialize(): string;
}
type
当:type Result = Success | Error;
type Nullable<T> = T | null;
type KeysOfType<T, U> = {
[K in keyof T]: T[K] extends U ? K : never
}[keyof T];
interface Base {
id: string;
}
type WithTimestamps<T extends Base> = T & {
createdAt: Date;
updatedAt: Date;
};
type User = WithTimestamps<Base>;
interface ApiResponse<T> {
data: T;
error: string | null;
}
type ResponseData<T> = T extends ApiResponse<infer U> ? U : never;
interface Product {
id: string;
name: string;
price: number;
}
type ReadonlyProduct = Readonly<Product>;
type PartialProduct = Partial<Product>;