如何将 CANCEL 回调附加到 axios 请求承诺,以便 saga 可以在 TypeScript 中处理它?

问题描述 投票:0回答:1

我想将 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>”类型。 在类型“Promise>”上找不到带有“string”类型参数的索引签名。ts(7053)

我做错了什么?

reactjs typescript axios redux-saga saga
1个回答
0
投票

所以解决方案很简单:只需通过添加 [CANCEL: string] 属性来扩展请求类型:

export interface CancellablePromise<T = any, E = ApiError> extends Promise<APIResponse<T, E>> {
  [CANCEL: string]: () => void;
}
© www.soinside.com 2019 - 2024. All rights reserved.