glownight

返回

type vs interface 关键区别#

特性interfacetype
扩展方式extends(声明合并)&(交叉类型)
同名声明✅ 自动合并❌ 报错(重复定义)
适用场景对象结构、类实现联合类型、元组、复杂类型运算
性能更快(声明合并优化)稍慢(需解析类型表达式)

核心差异示例#

1. 扩展方式#

// interface: extends 声明式扩展
interface Animal { name: string }
interface Dog extends Animal { breed: string }

// type: & 交叉类型
type Animal = { name: string }
type Dog = Animal & { breed: string }
typescript

2. 同名合并(interface 独有)#

// ✅ interface 自动合并
interface User { name: string }
interface User { age: number }  // 合并为 { name, age }

// ❌ type 报错
type User = { name: string }
type User = { age: number }     // Error: 重复标识符
typescript

3. type 独有能力#

// 联合类型(interface 做不到)
type Status = 'pending' | 'success' | 'error';

// 元组
type Point = [number, number];

// 条件类型
type IsString<T> = T extends string ? true : false;

// 映射类型
type ReadonlyUser = Readonly<User>;
typescript

选择建议#

场景推荐
定义对象结构、类interface
需要多次扩展同一类型interface
联合类型、元组、条件类型type
第三方库类型声明interface(支持用户扩展)
type vs interface 关键区别
作者 glownight
发布于 2025年7月17日