1. TypeScript 类型系统的核心构建块
TypeScript 作为 JavaScript 的超集,其最核心的价值在于静态类型检查。在这个类型系统中,interface 和 type 是最常用的两种类型定义方式。刚开始接触 TypeScript 时,很多人都会困惑:它们看起来都能定义对象形状,到底有什么区别?什么时候该用 interface,什么时候该用 type?
我在实际项目中曾经因为混用两者导致过类型合并问题,后来通过系统梳理和大量实践,总结出了一些实用经验。理解它们的区别不仅能帮助我们写出更健壮的类型定义,还能在复杂类型操作时避免很多坑。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础概念与语法对比
2.1 interface 的基本用法
interface 的主要作用是描述对象的形状。它的语法非常直观:
typescript复制interface User {
id: number;
name: string;
age?: number; // 可选属性
readonly createdAt: Date; // 只读属性
}
interface 的特点包括:
- 专注于描述对象结构
- 支持继承(extends)
- 可以被类实现(implements)
- 允许同名接口自动合并
2.2 type 的基本用法
type 的语法更加灵活,可以定义各种类型别名:
typescript复制type User = {
id: number;
name: string;
age?: number;
readonly createdAt: Date;
};
// 还可以定义联合类型、元组等
type ID = number | string;
type Point = [number, number];
type 的特点包括:
- 可以定义任何类型的别名
- 支持联合类型、交叉类型等高级类型
- 可以使用条件类型、映射类型等高级特性
- 不允许同名类型重复定义
3. 核心差异深度解析
3.1 声明合并行为差异
这是两者最显著的区别之一。interface 支持声明合并:
typescript复制interface User {
name: string;
}
