You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React TypeScript获取单条API数据时出现Property does not exist错误求助

解决TypeScript中“Property 'title/body' does not exist on type 'Todo[]'”错误

问题根源

你请求的是单条帖子数据(/posts/${id}),但错误地将数据类型定义为Todo数组(Todo[]),而实际API返回的是单个Todo对象。TypeScript检测到你试图访问数组类型上不存在的title/body属性,因此抛出错误。

修改步骤

1. 修正State的类型和初始值

将data的类型从Todo[]改为Todo | null,初始值设为null(初始状态下无数据):

const [data, setData] = useState<Todo | null>(null);

2. 修正Axios请求的泛型类型

Axios的get方法泛型要对应单个Todo对象,而非数组:

const res = await axios.get<Todo>(`https://jsonplaceholder.typicode.com/posts/${id}`);

3. 渲染时处理空值

因为data可能为null,渲染前需先判断数据是否存在,避免运行时错误:

{data && (
  <>
    <div className='text-2xl'>{data.title}</div>
    <div className='text-xl'>{data.body}</div>
  </>
)}

完整修正后的代码

import { useParams } from "react-router-dom";
import axios from "axios";
import { useState, useEffect } from "react";

const SinglePOST = () => {
  type Todo = {
    title: string;
    body: string;
    userId: number;
    id: number;
  };

  const { id } = useParams();
  const [data, setData] = useState<Todo | null>(null);
  const [loading, setLoading] = useState<boolean>(false);
  const [isError, setError] = useState<any>(null);

  useEffect(() => {
    const singleReq = async () => {
      try {
        setLoading(true);
        const res = await axios.get<Todo>(
          `https://jsonplaceholder.typicode.com/posts/${id}`
        );
        setData(res.data);
      } catch (err) {
        setError(err);
      } finally {
        setLoading(false);
      }
    };
    singleReq();
  }, [id]);

  return (
    <div className='w-full h-screen bg-slate-900 text-neutral-300 p-4'>
      <div className='w-full flex justify-center'>Single Post {id}</div>
      {loading && <p>...Loading</p>}
      {isError && <p>Error in getting post</p>}
      {data && (
        <>
          <div className='text-2xl'>{data.title}</div>
          <div className='text-xl'>{data.body}</div>
        </>
      )}
    </div>
  );
};

export default SinglePOST;

内容的提问来源于stack exchange,提问作者clemon ezeh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:05:34