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
的实例?
答案 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>;
回调的自变量reason
是onrejected
。
您可以使用布尔文字类型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