interface 接口(含继承与声明合并)

最后更新:2026-10-22

interface 接口(含继承与声明合并)

interface 用一个名字描述对象的结构:规定有哪些属性、方法以及各自的类型。它只存在于编译期(转译后完全消失),支持 extends 继承与同名声明合并,是与 type 别名并列的两大类型定义方式。

分组类型组合
类型语法
严格模式不需要

ℹ️ 说明 编辑器将 TypeScript 转译为 JavaScript 后运行(不做类型检查);类型检查结果见示例 Output。

📝 语法

interface Animal {
  name: string;
  speak(): void;
}

// 继承
interface Pet extends Animal {
  owner: string;
}

// 声明合并:同名 interface 自动合并成员
interface Window { title: string }
interface Window { version: number }

⚙️ 参数

extends继承一个或多个接口,获得其全部成员
?:可选属性标记,允许该属性缺席
readonly只读修饰符,赋值后不可再修改

返回值:无返回值——interface 是纯类型层概念,不产生任何运行时代码。

▶ 示例

修改下面的代码,点击试一试查看转译运行结果:

输出:

Tom Jerry
Meow

(转译后运行输出;类型检查由 tsc 完成——把 name 改成数字会得到 error TS2322)

💡 要点

ℹ️ 说明 interface 转译后完全消失,零运行时开销;它只是给编译器看的"结构说明书"。
💡 提示 同名 interface 会自动合并(声明合并),这是扩展第三方库类型(如给 window 加自定义字段)的标准手法。
⚠️ 注意 interface 与 type 别名大部分场景可互换;需要联合/映射/条件等类型运算时只能用 type,需要声明合并时只能用 interface(教程第 9/11 课有完整对比表)。
更多案例即将上线。

📚 相关教程

❓ 常见问题

Q interface 和 type 有什么区别?
A 两者都定义对象结构,日常可互换。interface 支持 extends 与声明合并;type 能表达联合、元组、映射、条件类型等任意类型运算。团队约定二选一即可,混用要克制。
Q interface 能描述函数、数组或类吗?
A 可以:可调用签名((x: number): string)描述函数,索引签名([i: number]: T)描述数组,new 签名描述构造函数,类用 implements 实现接口。
Q 什么是声明合并?什么时候有用?
A 两个同名 interface 的成员会自动合并成一个。典型用途:给第三方库的 window、Request 等类型补自定义字段,而无需改库源码。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏