【问题标题】:'Property 'XX' does not exist on type' useState'类型'useState上不存在'属性'XX'
【发布时间】:2020-03-25 08:44:50
【问题描述】:

我有一个 API 调用返回一个响应,我用 setInfo 添加到 state:

const [info, setInfo] = useState([])

axios.post('/user', {
  data: 'data'
})
.then(response => {
  setInfo(response.data);
})
.catch(error => {
  console.log(error);
});

当我析构响应时,我从 Typescript 收到以下警告:

const { propertyOne } = info
Property 'propertyOne' does not exist on type 'any[]'.

向界面添加属性或“信息”并不能解决这个问题,我不确定我需要在这里做什么?

【问题讨论】:

  • 您正在尝试访问数组中对象的属性。将info状态初始化为对象useState({})

标签: reactjs typescript axios


【解决方案1】:

你需要为信息状态定义类型,试试这个

type InfoType = {
   propertyOne: any;
}
const [info, setInfo] = useState<InfoType[]>([]);
const { propertyOne } = info[0];

【讨论】:

  • 谢谢,我在空数组 1 useState 上收到以下错误:''undefined[]' 类型的参数不可分配给'{ propertyOne: string; 类型的参数; } | (() => { propertyOne: string; })'。类型 'undefined[]' 不可分配给类型 '() => { propertyOne: string; }'。类型 'undefined[]' 不匹配签名 '(): { propertyOne: string; }'.'
  • 如果你的Info是一个数组,那么你不能const { propertyOne } = info,它必须是const { propertyOne } = info[0]我更新了答案
【解决方案2】:

修复

变化:

const [info, setInfo] = useState([])

对于具有propertyInfo 的东西,例如:

 const [info, setInfo] = useState<{propertyOne: any}({propertyOne: null});

【讨论】:

  • 感谢您的回复,我收到以下信息:“此表达式不可调用。类型 '{ propertyOne: any; }' 没有调用签名。”
猜你喜欢
  • 2020-11-11
  • 2021-01-09
  • 2021-07-10
  • 2017-07-22
  • 2023-03-26
  • 2023-04-02
  • 2019-12-20
  • 2021-12-07
相关资源
最近更新 更多