使用Typescript 2.0.7
当使用q
Promises时,即使声明函数的定义返回类型甚至是相应的then
,只要函数可能返回null
,任何类型限制都会被取代和错误解析类型不会抛出任何错误。
import Q = require('q');
class Foo {
prop1: string;
prop2: number;
}
function test () : Q.IPromise<Foo>
{
return Q.resolve('stuff')
.then<Foo>(() =>
{
if(Math.random() > 0.5)
{
return Q.resolve({ id: 3, value: new Foo() }) // This should throw an error
}
else
{
return Q.resolve(null);
}
});
}
此外,当尝试使用ES6 Promises测试相同的行为时,代码之后也没有抛出错误。
function test(): Promise<Foo>
{
return new Promise((resolve, reject) => {
resolve('foo');
})
}
有人可以解释这种行为以及如何处理以获取正确的错误或者这是TypeScript的错误吗? (我已经看到了描述类似情况的多个问题,但没有一个能够真正解释这种行为)
答案 0 :(得分:1)
当您返回非通用Promise
时,它实际上会被解释为Promise<{}>
,可以分配给Promise<Foo>
。它现在在resolve
上抛出错误的原因是什么,可能是什么。
您的代码应该是强类型的。
function test(): Promise<Foo>
{
return new Promise<Foo>((resolve, reject) => {
resolve('foo'); //compile error here
})
}