我正在使用Reaction查询从这个公共API:https://jsonplaceholder.typicode.com/todos获取TODO项的array.一旦获得TODO项的列表,我就将每个项映射到组件中的一个列表.以下是代码片段:

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

interface Todo {
  id: number;
  title: string;
  userId: number;
  completed: boolean;
}

const fetchTodos = () => {
  axios
    .get<Todo[]>("https://jsonplaceholder.typicode.com/todos")
    .then((res) => res.data);
};

const TodoList = () => {
  
  const { data: todos } = useQuery({
    queryKey: ["todos"],
    queryFn: fetchTodos,
  });

  return (
    <ul className="list-group">
      {todos?.map((todo: Todo) => (
        <li key={todo.id} className="list-group-item">
          {todo.title}
        </li>
      ))}
    </ul>
  );
};

export default TodoList;

当前,I VS Code引发了一个错误,即属性‘map’在类型‘Never’上不存在.我在控制台里也被告知:查询数据不能是未定义的.VS代码说todos是类型void | undefined.然而,当我将类型Todo[]指定为axios.get()的一部分时,我不认为这是可能的.

current_error

我试图显式定义fetchTodos()函数的返回类型,但没有成功.

任何帮助都将不胜感激!

推荐答案

对于通过Axios读取的数据数组,类型‘Never’上不存在属性‘map’

您的fetchTodos函数是void函数(不返回任何内容).您应该添加一个return关键字来修复该问题.

const fetchTodos = () => {
  return axios // return value
    .get<Todo[]>("https://jsonplaceholder.typicode.com/todos")
    .then((res) => res.data);
};

Typescript相关问答推荐

Angular 17 Select 错误core.mjs:6531错误错误:NG 05105:发现意外合成监听器@transformPanel.done

使某些类型的字段变为可选字段'

如果存在ts—mock—imports,我们是否需要typescpt中的IoC容器

如何将联合文字类型限制为文字类型之一

带switch 的函数的返回类型的类型缩小

TS如何不立即将表达式转换为完全不可变?

有没有可能为这样的函数写一个类型?

扩展参数必须具有元组类型或传递给REST参数

类型TTextKey不能用于索引类型 ;TOption

如何在方法中正确地传递来自TypeScrip对象的字段子集?

TypeScrip中的类型安全包装类

如何在使用条件类型时使用void

我可以使用typeof来强制执行某些字符串吗

在正常函数内部调用异步函数

TypeScrip:使用Cypress测试包含插槽的Vue3组件

换行TypeScript';s具有泛型类型的推断数据类型

为什么TS条件返回要求不明确的强制转换而不是精确的强制转换?

Typescript 是否可以区分泛型参数 void?

为什么 Typescript 无法正确推断数组元素的类型?

有没有办法从不同长度的元组的联合中提取带有类型的最后一个元素?