首页 > 解决方案 > 打字稿 - 无法访问子类中的自定义方法

问题描述

我是打字稿的新手。我对 Error 进行了子类化,并在 MyError 类中实现了一个新方法 getCode()。

export class MyError extends Error {
public code: number;
    constructor(code: number, message?: string) {
        super(message);
        Error.captureStackTrace(this, MyError);
        this.name = 'MyError';

        this.code = code;
    }
    public getCode() {
        return 405;
    }
}
let r: MyError = new MyError(404, "test");
console.log(r.getCode());

当我创建 MyError 类的对象并尝试访问 r.getCode() 方法时,出现以下错误。我们不能在子类中添加自定义方法。我不明白为什么找不到函数 getCode() 的原因?

console.log(r.getCode());
TypeError: r.getCode is not a function
    at Object.<anonymous> (c:\Users\test\vscode-ws\MyError.js:35:15)
    at Module._compile (internal/modules/cjs/loader.js:701:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32)

标签: typescript

解决方案


您遇到了特定于扩展 Error 类的问题(请参阅https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and -地图可能不再工作)。

作为一种解决方法,在调用后立即调整原型super()

Object.setPrototypeOf(this, MyError.prototype);


推荐阅读