interface Person { name: string; age: number } 声明后,任何标注为 Person 的对象必须长这样。它只描述结构(shape),不包含任何实现——编译后完全消失。两个同名 interface 会自动声明合并(declaration merging),这是它与 type 别名的一个关键区别。
interface 与 type 的日常区别:interface 可合并、可被类 implements;type 能表达联合类型、交叉类型、 mapped 类型等复杂运算。描述对象结构优选 interface(可扩展、报错信息更友好),表达类型计算用 type。
interface Person {
name: string;
age: number;
greet?(): void; // 可选属性
readonly id: number; // 只读属性
}
const p: Person = { id: 1, name: 'Tom', age: 20 }; // ✓
const q: Person = { id: 2, name: 'Tom' }; // ✗ 缺 age
// 声明合并:同名接口自动拼接
interface Window { myTool: () => void }
interface Window { other: number }
// 等价于 Window 同时拥有 myTool 与 other
// 类实现接口
class User implements Person {
id = 1; name = 'Tom'; age = 20;
}