Как ввести асинхронную выборку в функцию?

Учитывая следующий код, я получаю сообщение об ошибке небезопасного назначения для константы данных.

import { useQuery, QueryResult } from "react-query";
import { url } from './api';

import { User, UserFetch } from '../types/User';

const getUser = async (): Promise<User> => {
  //
  // Unsafe assignment of an any value.eslint@typescript-eslint/no-unsafe-assignment
  //
  const data = await fetch(url).then((res) => res.json());
  return data;
}

export default function useUser(): QueryResult<User> {
  return useQuery<User>("userData", getUser);
}

Как я могу безопасно ввести ожидаемый результат назначения данных?

1 ответ

Решение

Иногда вы достигаете предела безопасности типов. Это один из тех моментов.

Нет безопасного способа взять то, что res.json()возвращает и присваивает ему определенный тип. По сути, это прыжок веры в то, что результат, возвращаемый сервером, действительно имеет формуUser интерфейс.

Отключение правила в этом случае кажется уместным. Вы также можете уточнить тот факт, что вы утверждаете, что сервер возвращаетUser с помощью явного утверждения типа (хотя не уверен, что это отключит правило lint):

const getUser = async (): Promise<User> => {
  const data = (await fetch(url).then((res) => res.json())) as User;
  return data;
}
Другие вопросы по тегам