TypeScript 中的 noImplicitOverride

说明 noImplicitOverride 为什么要求覆写父类成员时显式写出 override,以及它如何降低继承层级重构时的静默失配风险。

#tech / dev #resource / typescript #type / concept #status / growing

[!info] related notes

TypeScript 中的 noImplicitOverride

一句话定义

noImplicitOverride 要求子类中真正覆写父类成员的方法或属性,必须显式写出 override

核心机制 / 工作原理

官方文档给出的核心场景是:

  • 基类方法后来被改名了
  • 子类原本想覆写它,但现在悄悄失配了

例如:

class Album {
  setup() {}
}

class SharedAlbum extends Album {
  setup() {}
}

当开启:

{
  "compilerOptions": {
    "noImplicitOverride": true
  }
}

后,TypeScript 会要求你显式写:

class SharedAlbum extends Album {
  override setup() {}
}

这样如果基类结构发生变化,子类就不容易悄悄脱钩。

最小例子 / 最小场景

它最适合:

  • 有继承层级的类代码
  • 框架基类 / 领域基类
  • 容易被多人重构的 OO 代码

边界与易混淆点

它关心的是继承关系的显式性

不是所有团队都会大量用类继承,但一旦用了,它能明显提升重构安全性。

它不是“禁止 override”,而是“强制写出来”

核心收益在于:

  • 把“这里真的是在覆写父类成员”这件事变成可检查语义

函数式代码里它存在感会很弱

如果项目本身几乎不用 class 继承,这个选项自然就不突出。

参考信息

创建于 2026/5/15 更新于 2026/5/27