TypeScript 中的 noImplicitOverride
说明 noImplicitOverride 为什么要求覆写父类成员时显式写出 override,以及它如何降低继承层级重构时的静默失配风险。
#tech / dev
#resource / typescript
#type / concept
#status / growing
[!info] related notes
- 所属 MOC: TypeScript MOC
- 配置入口: tsconfig 使用详解
- 并列概念: TypeScript 类型检查, TypeScript 中的 strict
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 继承,这个选项自然就不突出。
参考信息
- TSConfig
noImplicitOverride: https://www.typescriptlang.org/tsconfig/noImplicitOverride.html