#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
.