Как ввести асинхронную выборку в функцию?
Учитывая следующий код, я получаю сообщение об ошибке небезопасного назначения для константы данных.
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;
}