как правильно вернуть результат запроса из блока try catch в typescript

Рейтинг: 0Ответов: 1Опубликовано: 28.07.2023

Есть get запрос и async функция, мне нужно вернуть результат запроса из функции, объявить переменную result внутри блока try catch нельзя, потому что return в конце функции её не увидит, поэтому я объявляю result до блока try catch и это работает.
Но я слышал что тип any нужно избегать, так как теряется смысл использования TypeScript, поэтому у меня появился такой вопрос - допустимо ли с точки зрения typescript так объявлять переменную result без инициализации и указания типа ,ведь result здесь имеет тип any?

export const getResult = async (URL): Promise<ResponseObject> => {
  let result;
  try {
    const response = await fetch(URL);
    result = await response.json();
  } catch (error) {
    console.log(error);
  }
  return result;
};

Ответы

▲ 3Принят

1)Лучше определить тип возвращаемого значения:

interface ResponseObject {
  // ...
}

export const getResult = async (URL: string): Promise<ResponseObject> => {

  let result: ResponseObject = {} as ResponseObject;  
//или let result: ResponseObject | null = null;

  try {
    // ...
  } catch {
    // ... 
  }

  return result;
}

Инициализация со значением по умолчанию позволяет сохранить типизацию и избежать ошибки

2)Или использовать дженерики:

export const getResult = async <T>(URL: string): Promise<T> => {

  let result: T;

  // ...

  return result;
}

Тогда при вызове можно будет указать нужный тип:

const data = await getResult<ResponseObject>(url);

Избегать any и явно указывать типы - это ключевая идея TypeScript.