Как ввести аргументы функции, возвращающей функцию

#typescript #axios

Вопрос:

Я пытаюсь создать определения типов для различных служб axios для ресурсов в моем приложении. Я хотел бы применить определенный тип конфигурации для определенных служб (например, функция, которая извлекает один ресурс, должна иметь method свойство для установки GET ). Вот что у меня есть:

 import { AxiosPromise } from 'axios';
import fetch from 'auth/FetchInterceptor';

type TFetchOneConfig = {
    url: string;
    method: 'GET' | 'get';
};

type TFetchOne = (
    id: number
) => ReturnType<(config: TFetchOneConfig) => AxiosPromise<any>>;

interface Service {
    fetchOne: TFetchOne;
}

const AccountService: Service = {
    fetchOne: (id) => fetch({ url: `/accounts/${id}`, method: 'GET' }),
};

 

где fetch находится ан AxiosInstance .

Проблема, с которой я сталкиваюсь, заключается в том, что я могу предоставить любую AxiosRequestConfig (например method: 'POST' ) функцию fetch AxiosInstance в fetchOne функции. Как я могу применить TFetchOneConfig тип в качестве конфигурации?

Ответ №1:

Как вы сказали, fetch это типично AxiosInstance , и все. Если вы хотите применить другое поведение к fetch — оно должно быть другого типа. Это означает, что вы могли бы написать свою собственную «копию» AxiosIntance интерфейса, как это:

 interface MyAxiosInstance extends AxiosInstance {
  (config: AxiosRequestConfig amp; TFetchOneConfig): AxiosPromise;
}
 

А затем используйте этот интерфейс, чтобы ввести свой fetch .