我想将 CANCEL 回调附加到 Promise 中,以便 saga 可以处理它。
我的代码:
import { CANCEL } from 'redux-saga';
cancellableCall = <T = any, E = ApiError>(
options: AxiosRequestConfig,
validationTemplate?: TemplateType,
): Promise<APIResponse<T, E>> => {
const controller = new AbortController();
const request = this.call<T, E>(
{
...options,
signal: controller.signal,
},
validationTemplate,
) as Promise<APIResponse<T, E>>;
request[CANCEL] = () => controller.abort();
return request;
};
但是在这部分代码上
request[CANCEL]
我有下一个 TS 警告:
Element 隐式具有“any”类型,因为“string”类型的表达式不能用于索引“Promise我做错了什么?
所以解决方案很简单:只需通过添加 [CANCEL: string] 属性来扩展请求类型:
export interface CancellablePromise<T = any, E = ApiError> extends Promise<APIResponse<T, E>> {
[CANCEL: string]: () => void;
}