打字稿:是否有可能表明Promise解决和拒绝了特定类型?

时间:2018-10-12 10:16:04

标签: typescript promise typescript-typings

const myFunc = (value: boolean): Promise<boolean | Error> => {
  return new Promise((resolve, reject) => {
    if (!value) {
      reject(new Error("error msg"));
      return;
    }

    resolve(true);
  });
};

在给定的示例中,Promise始终解析为true,并且始终拒绝带有Error。但是Promise<boolean | Error>类型声明不是那么具体。是否有可能“告诉” TypeScript,如果Promise解析该值,则该值始终是布尔值(甚至更好-true),如果拒绝该值,则是Error的实例?

1 个答案:

答案 0 :(得分:2)

您无法使用当前的类型定义更改错误的类型。错误的类型始终为<xsl:transform version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:mode on-no-match="shallow-copy"/> <xsl:template match="v/text()">NaN</xsl:template> </xsl:transform> 。从any的定义来看这很明显:

catch

catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): Promise<T | TResult>; 回调的自变量reasononrejected

您可以使用布尔文字类型any来表示值只能为true的事实

true

一种解决方法(虽然不是一个很好的解决方法)是将promise的结果用于错误和成功案例。

const myFunc = (value: boolean): Promise<true> => {
    return new Promise((resolve, reject) => {
      if (!value) {
        reject(new Error("error msg"));
        return;
      }
      resolve(true);
    });
  };

myFunc(true)
    .then(r=> r) // r is typed as true