implements 类实现接口与类即类型

最后更新:2026-10-22

implements 类实现接口与类即类型

implements 让类"认领"一个接口:编译器逐项检查类是否提供了接口要求的全部成员且类型吻合。接口描述"能做什么",类回答"怎么做"——同一个接口可以有多个完全不同的实现。

分组函数与类
类型语法
严格模式不需要

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

📝 语法

interface Storage {
  save(key: string, value: string): void;
  load(key: string): string | null;
}

class MemoryStorage implements Storage {
  private map = new Map<string, string>();
  save(key: string, value: string): void { this.map.set(key, value); }
  load(key: string): string | null { return this.map.get(key) ?? null; }
}

⚙️ 参数

implements认领接口:可一次实现多个(implements A, B);检查方向是"类满足接口"
extends + implements允许同时用:class Foo extends Base implements Storage——继承实现的同时背契约

返回值:方法返回类型必须与接口签名一致或更窄(协变);参数则要求更宽(逆变),否则编译报错。

▶ 示例

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

输出:

dark null

(转译后运行输出;删掉 load 方法或把返回类型改成 string 都会得到编译错误——implements 逐项检查)

💡 要点

ℹ️ 说明 implements 是编译期检查,不影响运行时结构;转译后接口消失,类就是一个普通类。
⚠️ 注意 接口只描述公开成员——private 字段不参与 implements 检查;反过来接口里写的成员类里必须全有,少一个就报错。
💡 提示 依赖倒置的落地手法:业务代码依赖 Storage 接口,测试注入 MemoryStorage、生产注入 LocalStorage——调用方代码一行不改。
更多案例即将上线。

📚 相关教程

❓ 常见问题

Q implements 和 extends 有什么区别?
A extends 继承实现(拿代码),implements 承诺形状(背契约)。类只能 extends 一个父类,但可以 implements 多个接口。
Q 类没写 implements 也能赋值给接口类型吗?
A 能——TS 是结构化类型,形状吻合即可。implements 的价值是显式声明意图 + 让"接口改了类没跟上"在类定义处就报错,而不是等赋值处才炸。
Q 接口里能定义构造函数约束吗?
A 能,写 new 签名:interface Ctor<T> { new (...args: any[]): T },常用于工厂/容器的注册类型。
Web-Tutorial.com

Web-Tutorial 技术团队

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

100%

🙏 帮我们做得更好

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

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