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]);