Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Person类型的TypeScript错误(TS2345)参数|未定义不能分配给Person类型的参数_Javascript_Reactjs_Typescript_React Hooks - Fatal编程技术网

Javascript Person类型的TypeScript错误(TS2345)参数|未定义不能分配给Person类型的参数

Javascript Person类型的TypeScript错误(TS2345)参数|未定义不能分配给Person类型的参数,javascript,reactjs,typescript,react-hooks,Javascript,Reactjs,Typescript,React Hooks,我是打字新手,不知道我在这里做错了什么 interface Person{ id:number; name:string } export async function getPersonInfo(person: Person): Promise<Person>{ //some code here return response.data.person } const someFunc = () => { const [person, setPerson]

我是打字新手,不知道我在这里做错了什么

interface Person{
  id:number;
  name:string
}

 export async function getPersonInfo(person: Person): Promise<Person>{
 //some code here
 return response.data.person
 }

const someFunc = () => {
const [person, setPerson] = useState<Person>();

  useEffect(() => {
     getPersonInfo(person).then((data) => {
     setPerson(data);
     });
  }, [person]);
接口人{
id:编号;
名称:string
}
导出异步函数getPersonInfo(person:person):Promise{
//这里有一些代码
返回response.data.person
}
常量someFunc=()=>{
const[person,setPerson]=useState();
useffect(()=>{
getPersonInfo(个人)。然后((数据)=>{
设置人员(数据);
});
},[人];
getPersonInfo中传递带有null或未定义值的接口实例似乎是个问题。但是,如果我使用useState传递一个interface Person数组,它会起作用,如下所示

export async function getPersonInfo(person: Person[]): Promise<Person[]>{
//some code here
return response.data.person
}

const [persom, setPerson] = useState<Person[]>([])

useEffect(() => {
getPersonInfo(person: Person[]).then((data) => {
setPerson(data);
});
导出异步函数getPersonInfo(person:person[]):Promise{ //这里有一些代码 返回response.data.person } const[persom,setPerson]=useState([]) useffect(()=>{ getPersonInfo(person:person[])。然后((数据)=>{ 设置人员(数据); });
为什么它适用于数组而不适用于单个对象?

因为person的初始值未定义

所以person是未定义的,直到您从api调用接收到person并设置它


作为一个数组,您将初始值设置为空数组-它是一个数组,只是空的。但它不是未定义的。因此Person[]是一个有效类型。

问题在于调用
useState()
。由于不传递初始值,变量
person
将首先未定义。在第二个代码中,向函数传递一个空数组,以便变量将是一个与类型
person[]匹配的空数组。

要解决此问题,您需要使用Person对象初始化状态,或者接受
undefined
作为函数的参数

export async function getPersonInfo(person?: Person): Promise<Person>{
  //some code here
  return response.data.person
}
导出异步函数getPersonInfo(person?:person):Promise{
//这里有一些代码
返回response.data.person
}

您的问题在于

const[person,setPerson]=useState();
vs
const[persom,setPerson]=useState([])
在你的第一个(出错的地方),则
person
的初始值未定义,因此编译器理解这意味着
person
可以是
person
或未定义。在第二个值中,您将
person
初始化为空数组,因此编译器理解这意味着它是
person
的数组,但没有
Person
中的对象

真正的问题最终出现在这里:

export async function getPersonInfo(person: Person): Promise<Person>{
   //some code here
   return response.data.person
}
useEffect(() => {
  if (person) {
    getPersonInfo(person).then((data) => {
      setPerson(data);
    });
  }
}, [person]);