我有以下方法:
class A {
m(): Q.Promise<MyObject> {
return someAsyncOp()
.then(x => transformX(x))
.catch(err => {
log.error(err);
throw err; // <-- doesn't type check
})
}
}
我想要完成的是获得此方法的类型检查。到目前为止,似乎它期望catch块返回Promise中参数化类型的东西。
这很奇怪,因为一个方法可以返回或抛出,所以在我看来这应该键入check。
没有catch
子句,它会进行类型检查。使用catch子句编译失败,错误为Type Q.Promise<void> is not assignable to Q.Promise<MyObject>
。这个错误让我相信编译器希望我在catch子句中返回一个值,据我所知,我没有义务这样做。
有没有办法让这种类型检查?我做错了什么,或者打字稿不支持我试图做的事情吗?
Typescript编译器版本1.8.10
答案 0 :(得分:0)
我做错了什么或TypeScript不支持我正在尝试做的事情
你没有做错任何事。 catch
场景完全不受限制。
字面上任何可能会导致错误进入catch
。基本上TypeScript不会沿着强制你在每个点声明throws
的java路径
答案 1 :(得分:0)
我的老师向我解释了这一点。显然它就像参数化lambda表达式一样简单:
class A {
m(): Q.Promise<MyObject> {
return someAsyncOp()
.then(x => transformX(x))
.catch((err): MyObject => { // <-- Now everything compiles fine.
log.error(err);
throw err;
})
}
}