В TypeScript можно типизировать функцию fetch
без использования оператора as
, используя generic-параметр в объявлении типа.
В целях типизации функции fetch
, мы можем определить вспомогательный тип ResponseData<T>
, который будет представлять структуру данных, возвращаемую из API.
type ResponseData<T> = { success: boolean; data: T; error?: string; };
Затем, мы можем использовать этот тип и указать его в качестве generic-параметра в типе возвращаемого значения у функции fetch
.
function getData<T>(url: string): Promise<ResponseData<T>> { return fetch(url) .then((response: Response) => { if (!response.ok) { throw new Error(response.statusText); } return response.json(); }) .then((data: T) => { return { success: true, data }; }) .catch((error: Error) => { return { success: false, error: error.message, data: null }; }); }
В этом примере мы создали функцию getData
, принимающую URL в качестве аргумента. Она возвращает Promise, с типизированными данными, представленными в ResponseData<T>
.
В теле функции мы используем функцию fetch
для выполнения запроса. Затем, мы проверяем статус ответа с помощью response.ok
. Если статус не успешный, мы выбрасываем ошибку. Затем мы преобразуем ответ в json и типизируем его как T
.
Если все успешно, мы возвращаем объект ResponseData
с полем success: true
и данными. Если есть ошибки, мы возвращаем объект ResponseData
с полем success: false
, текстом ошибки и значением null
для данных.
Используя этот подход, мы можем типизировать функцию fetch
без использования оператора as
и предоставить более точные типы для возвращаемых данных из API.