修复axios响应类型为任意

vatpfxk5  于 2023-11-18  发布在  iOS
关注(0)|答案(1)|浏览(128)

这是我的基本代码(我将不同文件中的内容复制在一起):

import axios from "axios";
import { useQuery } from '@tanstack/react-query';

interface Scenario {
    id: number,
    name: string
}

const scenario = {
    getAll: () => axios.get<Scenario[]>(`/api/dyn/ax_scenario`)
}

const { 
    isLoading,
    isErrors,
    data = []
} = useQuery({
    queryKey: ['api.scenario.getAll'],
    queryFn: api.scenario.getAll
});

字符串
当我将鼠标悬停在数据上时,我得到以下Typescript信息:

const data: any[] | AxiosResponse<Scenario[], any>


为什么会有any[]
我想得到的结果就是AxiosResponse<Scenario[]>

i2byvkas

i2byvkas1#

useQuery提供的data的类型是queryFnundefined的返回类型,在您的示例中是AxiosResponse<Scenario[], any> | undefined
除此之外,你给予data一个默认值data = [],由于TypeScript不知道[]的类型,它给它一个类型any[],所以你得到AxiosResponse<Scenario[], any> | any[]
如果你想为data提供另一个(例如更严格类型的)默认类型,你可以这样做。但是从useQuery你总是会得到undefined。要为默认空数组提供一个类型,你可以通过data = [] as Scenario[]做一个类型Assert。

相关问题