繁体   English   中英

如何创建 Error 的子类型来抛出它?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM