我创建了一个自定义的打字稿错误,它基于几个来源似乎是这样的:
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。
答案 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
所以问题中没有发布错误