我想编写union类型的对象包含用Promise包装的布尔文字类型作为XHR响应。但我无法提出合适的类型。
type MyResponseSuccess = { data: any, error: false };
type MyResponseFailure = { message: string, error: true };
type MyResponse = MyResponseSuccess | MyResponseFailure;
function call(): Promise<MyResponse> {
return fetch('ENDPOINT')
.then(res => res.json())
.then(payload => ({ data: payload, error: false }))
.catch(err => ({ error: true, message: err.toString() }));
}
此代码导致以下错误。为什么...?或者如果有人知道这个问题的解决方法,请告诉我。
输入'Promise&lt; {data:any;错误:布尔值; } | {error:boolean; 消息:任何; }&GT;”不能指定为“承诺”类型。 输入'{data:any;错误:布尔值; } | {error:boolean;消息:任何; }'不能分配给'MyResponse'类型。 输入'{data:any;错误:布尔值; }'不能分配给'MyResponse'类型。 输入'{data:any;错误:布尔值; }'不能分配给'MyResponseFailure'。 类型'{data:any;错误:布尔值; }”。
答案 0 :(得分:1)
解决方案是我们必须告诉Typescript,响应的返回类型。在这种情况下,我们可以使用as
。
type MyResponseSuccess = { data: any, error: false };
type MyResponseFailure = { message: string, error: true };
type MyResponse = MyResponseSuccess | MyResponseFailure;
function call(): Promise<MyResponse> {
return fetch('ENDPOINT')
.then(res => res.json())
.then(payload => ({ data: payload, error: false } as MyResponseSuccess))
.catch(err => ({ error: true, message: err.toString() } as MyResponseFailure));
}