I have a component in React that shows a navigation based on a prop. I cannot figure out why I am getting this error when I'm trying to run the application:
(19,8): Type '{}' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes<TableSystems> & Readonly<{ children?: ReactNode; }...'.
Type '{}' is not assignable to type 'Readonly<{ todos: any; showNav: boolean; }>'.
Property 'todos' is missing in type '{}'.
My component look like this:
import * as React from 'react'
import Navigation from '../components/Navigation'
import TableSystems from '../components/TableSystems'
class SystemTable extends React.PureComponent<{showNav: boolean }> {
render(){
return (
<div >
<div >
<div className="navigationContainer">
<Navigation {...this.props.showNav} className="sideMenu"/>
<TableSystems/>
</div>
</div>
</div>)
}
}
export default SystemTable
I can't find what's the problem here.
The component looks like this:
import * as React from 'react';
import history from '../history';
class Navigation extends React.Component<any> {
constructor(props){
super(props);
this.toVersions = this.toVersions.bind(this);
}
toVersions(){
history.push('/versions');
}
render() {
var style = this.props.visible ? "toggled" : "";
console.log(style);
return (
<div className={style} id="wrapper">
<div id="sidebar-wrapper">
<ul className="sidebar-nav">
<li className="sidebar-brand">
<a href="#">
Menu
</a>
</li>
<li >
<a className="nav-link" href="#">List1</a>
</li>
<li >
<a className="nav-link" href="#">List2</a>
</li>
<li >
<a className="nav-link" href="" onClick={this.toVersions}>List3</a>
</li>
<li >
<a className="nav-link" href="#">List4</a>
</li>
</ul>
</div>
</div>
)
}
}
export default Navigation
您需要通过将属性todos
定义为todos?: any
使其成为可选属性,否则必须将值传递给它: { todos: null, showNav: boolean }
。
While I can only guess the element throwing the error (no clue where line 19 is), the error is quite self explanatory:
Type '{}' is not assignable to type 'Readonly<{ todos: any; showNav: boolean; }>'. Property 'todos' is missing in type '{}'.
The component expects a todo
property and a showNav
property, you are providing none of these. Try specifying the props explicitly:
<YourElement todos={ this.props.whatever } showNav={true}> ... </YourElement>
Another solution is to use the spread operator to use an objects properties for the element's props:
const someVar = { todos: "your type for todos here", showNav: true };
<YourElement { ...someVar } \>
Ensure you also type your element's props:
interface Props {
prop: string;
}
const SampleElement: React.SFC<Props> = (props) =>
<div>{props.prop}</div>
class AnotherElement extends React.Component<Props> { ... }
因此解决方案是将{... this.props}添加到组件中,如下所示:
<TableSystems {...this.props}/>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.