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

TypeScript中如何重写子类继承的asString方法自定义错误信息

解答

完全可以。TypeScript 基于类的继承机制原生支持子类重写父类的实例方法,你只需要在 RunTimeError 类中声明同名的 asString 方法,编写自定义的错误信息生成逻辑即可,实例调用该方法时会优先执行子类重写后的实现。

重写示例

你可以根据需求拼接自定义的上下文信息,比如带上调用栈追踪内容:

class RunTimeError extends Error {
    context: any

    constructor({details, posStart, posEnd, context}: SubErrorTypes) {
        super({errorName:"Runtime Error", details:details, posStart:posStart, posEnd:posEnd})
        this.context = context
    }

    asString() {
        // 自定义错误信息逻辑,以下示例为拼接调用栈
        let traceback = ''
        let currentCtx = this.context
        while (currentCtx) {
            traceback = `  At ${currentCtx.displayName}, line ${this.posStart.ln + 1}\n${traceback}`
            currentCtx = currentCtx.parent
        }
        return `${this.errorName}: ${this.details}\nCall trace:\n${traceback}`
    }
}

补充说明

  • 如果需要复用父类 asString 方法的原有返回内容,可以通过 super.asString() 直接调用父类实现,不用重复编写基础逻辑:
asString() {
    const baseErrorMsg = super.asString()
    return `${baseErrorMsg}\nRuntime context: ${JSON.stringify(this.context)}`
}
  • 你当前实现的 Error 是自定义类,不是 JS/TS 内置的全局 Error 对象,不存在内置错误类的原型链特殊兼容问题,直接重写即可正常生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:09:16