Typescript:是否可以用特定的类型表示Promise解析和拒绝? constmyfunc=(值:布尔):Promise=>{ 返回新承诺((解决、拒绝)=>{ 如果(!值){ 拒绝(新错误(“错误消息”); 返回; } 决心(正确); }); };
在给定的示例中,承诺总是解析为Typescript:是否可以用特定的类型表示Promise解析和拒绝? constmyfunc=(值:布尔):Promise=>{ 返回新承诺((解决、拒绝)=>{ 如果(!值){ 拒绝(新错误(“错误消息”); 返回; } 决心(正确); }); };,typescript,promise,typescript-typings,Typescript,Promise,Typescript Typings,在给定的示例中,承诺总是解析为true,并且总是以错误拒绝。但是Promise类型声明没有那么具体。是否可以“告诉”TypeScript,如果承诺解析的值始终是布尔值(或者更好-true),如果拒绝,则该值是错误的一个实例?您不能使用当前类型定义更改错误的类型。错误类型始终为any。从catch的定义来看,这是显而易见的: catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<
true
,并且总是以错误拒绝。但是Promise
类型声明没有那么具体。是否可以“告诉”TypeScript,如果承诺解析的值始终是布尔值(或者更好-true
),如果拒绝,则该值是错误的一个实例?您不能使用当前类型定义更改错误的类型。错误类型始终为any
。从catch
的定义来看,这是显而易见的:
catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): Promise<T | TResult>;
一种解决方法,虽然不是很好,但可以将承诺的结果用于错误和成功案例
const myFunc = (value: boolean): Promise<true | Error> => {
return new Promise((resolve, reject) => {
if (!value) {
resolve(new Error("error msg"));
return;
}
resolve(true);
});
};
myFunc(true)
.then(r => // r true | Error
{
if(r === true){
r // r is true
}else{
r.message // r is Error
}
})
constmyfunc=(值:布尔):Promise=>{
返回新承诺((解决、拒绝)=>{
如果(!值){
解决(新错误(“错误消息”);
返回;
}
决心(正确);
});
};
myFunc(真)
.然后(r=>//r true |错误
{
如果(r==真){
r//r是真的
}否则{
r、 消息//r为错误
}
})
错误类型始终为any
。(因此无法更改传递给catch的参数类型)。您可以返回布尔文本true
:Promis
,感谢您的详细解释。因此,TL;博士的回答是:“不,这是不可能的”。@wube是的,但仅仅回答“不”就好像是一块磁铁吸引了落选者:PIt只是一个总结,不是一个指控。当然,我很感激你的回答:)
const myFunc = (value: boolean): Promise<true | Error> => {
return new Promise((resolve, reject) => {
if (!value) {
resolve(new Error("error msg"));
return;
}
resolve(true);
});
};
myFunc(true)
.then(r => // r true | Error
{
if(r === true){
r // r is true
}else{
r.message // r is Error
}
})