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)
解决方案
您遇到了特定于扩展 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);
推荐阅读
- python - ImportError:没有名为 firebase_admin 的模块,同时尝试将数据提交到数据流中的 firestore
- java - Java Regex 匹配整个单词与特殊字符的任意组合
- c# - EF6 - 一对零或一关系 - 自己的主键和 CascadeDelete
- google-bigquery - > 运算符中的子查询结果
- laravel - Laravel 客户支持与第三方 Pusher 聊天
- webserver - Nginx 端口转发,使用 uwsgi 瓶
- javascript - 由于长时间运行的 SQL 过程,来自 Angular 的 POST 导致的 Nodejs 错误
- python - 在 Azure Python 中的两个日期列之间查找日期
- vb.net - TableAdapter 预览和填充/获取
- python - 通过 FacebookBusiness SDK 获得 Instagram 广告洞察