You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript调用抽象类原型抽象方法未报错,如何触发错误?

TypeScript调用抽象类原型的抽象方法未报错,如何触发错误?

我定义了一个包含抽象方法的抽象类,发现使用prototype和call调用该抽象方法时,TypeScript不会抛出任何错误。示例代码如下:

abstract class Human{
    age: string;
    constructor(age: string){
        this.age = age;
    }
    abstract name(): void
}

class Human1 extends Human{
    constructor(age: string){
        super(age);
        this.name()
        
    }
name(): void {
    Human.prototype.name.call(this); // 此处未触发错误,但name是抽象/未定义的
    let a = "do something";
    }
}

let a = new Human1("23")

原因分析

TypeScript对抽象类的类型校验核心是约束子类必须实现抽象方法,但对于直接访问抽象类原型上的抽象方法,当前类型系统没有做针对性的错误拦截。抽象类原型上的抽象方法仅作为类型声明存在,运行时实际是undefined,但TypeScript并未将这种调用判定为违规。

解决办法

  • 开启TypeScript的strict编译选项:虽然无法直接检测该场景,但严格模式会强化整体类型校验,减少此类不规范代码的出现。
  • 自定义ESLint规则:编写ESLint规则扫描代码,识别抽象类.prototype.抽象方法.call(this)这类调用,在编码阶段直接抛出错误提示。
  • 重构代码:抽象方法的设计初衷是让子类提供具体实现,直接调用抽象类原型的方法违背了抽象类的设计意图,建议移除这类调用,改用子类自身的实现逻辑。

内容的提问来源于stack exchange,提问作者masinnlos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 07:17:11