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