TypeScript重写抽象成员时如何强制要求使用override关键字
解答
TypeScript 编译器层面
截止当前最新稳定版,TypeScript 没有任何原生配置支持在实现抽象类/接口的抽象成员时,强制要求添加override关键字。noImplicitOverride 在设计阶段就明确将抽象成员实现排除在检查范围外:TS 团队的设计逻辑是,实现抽象成员是子类必须履行的类型契约,和重写已有默认实现的父类成员语义有本质区别,因此一直未采纳社区提出的相关配置提案。
需要注意的是,在实现抽象成员时手动写override关键字是完全合法的,TS 不会对该写法抛出编译错误,示例如下:
abstract class A { public abstract doSomething(): void; } class B extends A { // 可正常编译通过 public override doSomething(): void {} }
TypeScript-ESLint 层面
官方维护的 @typescript-eslint/eslint-plugin 目前没有内置对应规则覆盖这个校验场景。如果需要强制要求抽象成员实现必须加override,可以通过两种方式实现:
- 基于 ESLint 核心的
no-restricted-syntax规则,自定义AST选择器匹配「实现父抽象成员但未添加override修饰符」的类成员,配置后即可实现自动校验。 - 使用社区成熟的第三方ESLint插件提供的对应专用规则,开启后直接生效。
内容的提问来源于stack exchange,提问作者F-H
相关产品推荐
相关产品推荐

