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

JSDoc如何让子类重写方法的参数类型继承基类方法的对应类型?

解决方案

  • 方案1:使用@override注解(推荐,适配绝大多数支持JSDoc类型校验的环境,比如VS Code内置类型校验、开启checkJs的TypeScript项目)
    仅需在子类重写的方法上方添加/** @override */注释即可,类型工具会自动继承父类对应方法的参数、返回值类型,无需重复编写参数类型声明:
class BaseFooBar {
    /** @param {number} bar */
    foo(bar) {
        console.log('bar is' + bar);
    }
}

class FooBar extends BaseFooBar {
    /** @override */
    foo(bar) {
        // 此时bar会被自动识别为number类型
        console.log('bar is' + bar);
    }
}

该方案额外的优势是:如果重写方法的参数、返回值类型和父类不匹配,类型工具会直接抛出错误提示,避免继承时的类型不一致问题。

  • 方案2:抽离公共方法类型复用
    如果你的校验环境不支持@override注解,可以提前把方法的类型定义抽成公共的@typedef,父类子类都引用该类型即可,也不需要重复写参数注释:
/** @typedef {(bar: number) => void} FooMethod */

class BaseFooBar {
    /** @type {FooMethod} */
    foo(bar) {
        console.log('bar is' + bar);
    }
}

class FooBar extends BaseFooBar {
    /** @type {FooMethod} */
    foo(bar) {
        // bar会被识别为number类型
        console.log('bar is' + bar);
    }
}

后续要调整foo方法的类型时,仅修改FooMethod的定义即可,不用逐个修改父类子类的注释。

内容的提问来源于stack exchange,提问作者Ed.an

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:54:10