打字稿不会在错误的承诺返回类型上抛出错误

时间:2016-11-04 10:01:16

标签: typescript compiler-errors null promise q

使用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的错误吗? (我已经看到了描述类似情况的多个问题,但没有一个能够真正解释这种行为)

1 个答案:

答案 0 :(得分:1)

当您返回非通用Promise时,它实际上会被解释为Promise<{}>,可以分配给Promise<Foo>。它现在在resolve上抛出错误的原因是什么,可能是什么。

您的代码应该是强类型的。

function test(): Promise<Foo>
{
   return new Promise<Foo>((resolve, reject) => {
    resolve('foo'); //compile error here
   })
}