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
相关产品推荐
相关产品推荐

