无法检查捕获的Typescript自定义错误的类型

时间:2016-06-14 21:22:12

标签: typescript typescript1.8

我创建了一个自定义的打字稿错误,它基于几个来源似乎是这样的:

export class Exception extends Error {

    constructor(public message: string) {
        super(message);
        this.name = 'Exception';
        this.message = message;
        this.stack = (<any>new Error()).stack;
    }
    toString() {
        return this.name + ': ' + this.message;
    }
}

export class SpecificException extends Exception {

}

在我的代码中,我使用一个简单的方法抛出它:

 throw new SpecificException('foo');

在其他地方我抓住了它:

catch (e) {
  var t1 = Object.getPrototypeOf(e);
  var t2 = SpecificException.prototype;

  if (e instanceof SpecificException) {
    console.log("as expected");
  }
  else {
     console.log("not as expected");
  }
}

此代码打印&#34;不符合预期&#34;。有什么想法吗?

稍后修改

正如@basarat指出的那样,错误属于预期的类型。经过进一步调查,我意识到这是由于模块重复与我的环境有关,可能是因为在监视模式下使用mocha。

1 个答案:

答案 0 :(得分:5)

请输入以下代码:

declare global {
    interface Error {
        stack: any;
    } 
}
class Exception extends Error {

    constructor(public message: string) {
        super(message);
        this.name = 'Exception';
        this.message = message;
        this.stack = (<any>new Error()).stack;
    }
    toString() {
        return this.name + ': ' + this.message;
    }
}
class SpecificException extends Exception {

}

try {
  throw new SpecificException('foo');   
}
catch (e) {
  var t1 = Object.getPrototypeOf(e);
  var t2 = SpecificException.prototype;

  if (e instanceof SpecificException) {
    console.log("as expected");
  }
  else {
     console.log("not as expected");
  }
}

得到了预期的结果:

as expected

所以问题中没有发布错误