TypeScript 词条目录
前端Wiki/词条/接口 interface

接口 interface

定义描述对象结构的类型契约:规定一个对象必须有哪些属性、什么类型

interface Person { name: string; age: number } 声明后,任何标注为 Person 的对象必须长这样。它只描述结构(shape),不包含任何实现——编译后完全消失。两个同名 interface 会自动声明合并(declaration merging),这是它与 type 别名的一个关键区别。

interface 与 type 的日常区别:interface 可合并、可被类 implements;type 能表达联合类型、交叉类型、 mapped 类型等复杂运算。描述对象结构优选 interface(可扩展、报错信息更友好),表达类型计算用 type。

TypeScript
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;
}
⚠ 常见误区
🔗 相关词条类型守卫泛型工具类型
← 返回来源章节交叉类型与类型别名