Reactjs 从React.js转换为React.tsx属性';id';不存在于类型';绝不';。TS2339

Reactjs 从React.js转换为React.tsx属性';id';不存在于类型';绝不';。TS2339,reactjs,typescript,react-tsx,react-typescript,Reactjs,Typescript,React Tsx,React Typescript,我试图按照一个教程来学习react-in-type脚本。然而,当我构建我的解决方案时,我会发现错误。 代码 我遵循以下教程。非常感谢您提供的任何帮助或指导您应该明确地将类型添加到useState。当您提供空数组类型时,脚本将推断其类型为never[] const[posts,setPosts]=useState([])您应该始终指定状态变量的类型。在本例中,您使用的是一个post数组。因此,您必须创建一个Post接口,并在useState中使用该类型 import React,{useState

我试图按照一个教程来学习react-in-type脚本。然而,当我构建我的解决方案时,我会发现错误。 代码


我遵循以下教程。非常感谢您提供的任何帮助或指导

您应该明确地将类型添加到
useState
。当您提供空数组类型时,脚本将推断其类型为
never[]


const[posts,setPosts]=useState([])

您应该始终指定状态变量的
类型。在本例中,您使用的是一个post数组。因此,您必须创建一个Post接口,并在
useState
中使用该类型

import React,{useState,useffect}来自“React”;
从“axios”导入axios;
接口柱{
id:编号;
标题:字符串;
}
常量数据获取=()=>{
const[posts,setPosts]=useState([]);
useffect(()=>{
axios.get()https://jsonplaceholder.typicode.com/posts')
。然后(res=>{
console.log(res)
设置柱(res.data)
})
.catch(错误=>{
console.log(错误)
})
})
返回(
    {posts.map(post=>(
  • {post.title}
  • )}
); }; 导出默认数据获取;
这是否回答了您的问题?您知道为什么如果未提供或提供空数组,它会推断其类型为
从不
?空数组是
从不[]
,因为typescript没有关于项的信息,所以它假定它始终为空数组。几乎只有
any[]
unknown[]
,但它不安全,因此在严格的typescript中被禁用。
import React, { useState, useEffect } from 'react';
import axios from 'axios';


const DataFetching = () => {
  const [posts, setPosts] = useState([]);

  useEffect(() => {
    axios.get('https://jsonplaceholder.typicode.com/posts')
      .then(res => {
        console.log(res)
        setPosts(res.data)
      })
      .catch(err => {
        console.log(err)
      })
  })
  return (
    <div>
      <ul>
        {posts.map(post => (<li key={post.id}>{post.title}</li>))}
      </ul>
    </div>
  );
};

export default DataFetching;
TypeScript error in src/DataFetching.tsx(21,43):
Property 'id' does not exist on type 'never'.  TS2339