Reactjs 如何定义要避免的属性:属性';X';不存在于类型';Y';

Reactjs 如何定义要避免的属性:属性';X';不存在于类型';Y';,reactjs,typescript,axios,Reactjs,Typescript,Axios,我有一个分页的设备列表,例如来自Restful API的名称、序列号等。 我使用了Axios的get方法来获取列表。 查看Reactjs中的以下组件: import * as React from 'react'; import axios from 'axios'; export interface Props{ url: string; } export interface State{ devices: string[]; currentUrl: string; } clas

我有一个分页的设备列表,例如来自Restful API的名称、序列号等。
我使用了Axios的get方法来获取列表。
查看Reactjs中的以下组件:

import * as React from 'react';
import axios from 'axios';

export interface Props{
  url: string;
}
export interface State{
  devices: string[];
  currentUrl: string;
}
class Devices extends React.Component<Props, State>{
    constructor(props: Props){
      super(props);
      this.state = {devices: [], currentUrl: props.url};
      console.log('first log',this.state);
    }
    componentDidMount() {
      axios.get(this.state.currentUrl)
        .then(({data}) =>{
          console.log('Joye Data', data);
          this.setState({devices: data.member})
          console.log('Devices',this.state.devices)
        })
        .catch(function (error){
          console.log('Error of Axios', error);
        })
    }
    render(){
      return(
        <ul>
        {this.state.devices.map(device => <li>{device.name}</li>)}
        </ul>
      );
    }

}

export default Devices;
import*as React from'React';
从“axios”导入axios;
导出接口道具{
url:string;
}
导出接口状态{
设备:字符串[];
currentUrl:字符串;
}
类设备扩展了React.Component{
建造师(道具:道具){
超级(道具);
this.state={devices:[],currentUrl:props.url};
console.log('first log',this.state);
}
componentDidMount(){
get(this.state.currentUrl)
。然后({data})=>{
console.log(“Joye数据”,数据);
this.setState({devices:data.member})
console.log('Devices',this.state.Devices)
})
.catch(函数(错误){
console.log('Axios错误',错误);
})
}
render(){
返回(
    {this.state.devices.map(device=>
  • {device.name}
  • )}
); } } 导出默认设备;
除了捕获以下错误的render()方法之外,其他方法都可以正常工作:
类型“string”上不存在“Property”name

我知道,如果我想用Reactjs编译代码,我的意思是没有Typescript,前面提到的代码应该可以很好地工作,但是 如何定义属性(React中的道具)而不违反TS 惯例




注意:我搜索并找到了相同的问题,但他们的解决方案无法解决问题。

这是编译器错误。如果代码正常工作,这意味着类型指定不正确,这是由TypeScript编译器检测到的

this.state.devices
被键入一个字符串数组,其中包含以下行:

devices: string[];
编译器希望
device
在这一行是一个字符串,
string
类型被推断,因为
devices
被键入一个字符串数组:

this.state.devices.map(device => <li>{device.name}</li>);

这个问题不清楚
数据到底是什么。如果
设备
应该是具有
名称
属性的对象,为什么要将其定义为
字符串
?@estus data是获取接收数据的可选名称!我认为有什么地方出了问题,那就是“设备”,我没有声明任何“设备”名称。请具体说明
数据。成员
等于什么。你有矛盾。在一个地方,您希望
device
是一个字符串。在另一个地方,你希望它是一个物体。编译器只是指向它。我没有声明任何“设备”名称-为什么代码中有
device.name
?没有矛盾
data
是返回的JSON,而
成员
是其绑定到
data.element
的元素之一。顺便说一下,正如我提到的,我在接收数据方面没有任何问题(我通过console.log进行了检查)。问题是如何通过TS映射接收到的数据。关于上一个问题,为什么代码中有
device.name
,因为访问了设备的
name
属性。忘记设备u可以将其更改为
x
例如:
x=>{x.name}
。应该清楚问题是什么,
状态。设备
被声明为字符串数组。您正在映射那些试图访问这些字符串的
name
属性的设备(如错误消息所述)。实际的对象实例是否有什么并不重要。更改
状态的定义或更改映射设备的方式。
export interface State{
  devices: Array<{ name: string }>;
  currentUrl: string;
}