[英]How can I create a subtype of Error to throw it?
我试图抛出我自己的错误类型,以便在捕获时我可以调用if(instanceof DatabaseError)
并以我自己的方式处理它。
export class DatabaseError extends Error {
constructor(...args: string[] | undefined[]) {
super(...args);
this.name = "DatabaseError"
}
}
const err: DatabaseError = new DatabaseError(`Message`);
console.log(Object.getPrototypeOf(err));
但是,从所有意图和目的来看, err
并不是 DatabaseError 的实例。 日志返回Error {}
, instanceof DatabaseError 返回 false 。 我做错了什么,引入新错误以便我可以不同地处理它们的正确方法是什么? 或者我应该创建一个不继承自 Error 的对象?
这是我正在使用的 tsconfig.json:
{
"compilerOptions": {
"target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
/* Strict Type-Checking Options */
"strict": true, /* Enable all strict type-checking options. */
"esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
/* Advanced Options */
"skipLibCheck": true, /* Skip type checking of declaration files. */
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
}
}
你确定你试过instanceof
吗?
export class DatabaseError extends Error {
constructor(...args: string[] | undefined[]) {
super(...args);
this.name = "DatabaseError"
}
}
const err: DatabaseError = new DatabaseError(`Message`);
err instanceof DatabaseError // true
你可以在你的控制台中尝试这个 conde,只是不要忘记删除类型注释。 它按预期对我有用。
你不需要使用getPrototypeOf
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.