Typescript-无法访问子类中的自定义方法

时间:2019-05-10 12:55:46

标签: typescript

我是打字稿新手。我将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)

1 个答案:

答案 0 :(得分:2)

您遇到了一个特定于扩展Error类的问题(请参见https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work)。

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

Object.setPrototypeOf(this, MyError.prototype);