我正在从事一个涉及Typescript,React,Redux和react-router的项目。当我尝试将道具从ParentComponent传递到与Redux连接的ChildComponent时,打字稿向我抛出以下错误:
错误:(20,17)TS2339:类型上不存在属性'exampleProp' '内在属性和 IntrinsicClassAttributes,从不>,任何,任何>>和只读<{儿童?: ReactNode; }>和只读<...>'。
子组件看起来像这样:
interface ChildComponentProps {
user: UserData;
}
interface PropsToPass {
exampleProp: string;
}
class ChildComponent extends React.Component<ChildComponentProps & PropsToPass, any> {
constructor(props: ChildComponentProps & PropsToPass) {
super(props);
}
render() {
return (
<div>
Content
</div>
);
}
}
const mapStateToProps = (state: ApplicationState) => ({
user: state.authentication.user
});
const mapDispatchToProps = (dispatch: Function) => ({
});
export default withRouter(connect<{}, {}, PropsToPass>(mapStateToProps, mapDispatchToProps)(ChildComponent) as any);
父组件看起来像这样:
interface ParentComponentProps {
}
class ParentComponent extends React.Component<ParentComponentProps, any> {
constructor(props: ParentComponentProps) {
super(props);
}
render() {
return (
<ChildComponent
exampleProp="Test" // This line is highlighted as being problematic
/>
);
}
}
const mapStateToProps = (state: ApplicationState) => ({
});
const mapDispatchToProps = (dispatch: Function) => ({
});
export default connect(mapStateToProps, mapDispatchToProps)(ParentComponent);
我的编辑器突出显示了将“ test”作为exaampleProp
值传递给子组件的那一行。
为了解决我的问题,我查看了this post,但不幸的是,建议的解决方案对我不起作用。我认为这与我使用withRouter
函数导出子组件有关。我不确定我在做什么错。
任何帮助将不胜感激。
答案 0 :(得分:1)
即使我不太了解为什么仍要解决此问题,我还是设法解决了该问题,因此,如果有人理解,可以随时提供更多有关此问题起因的信息。
我所做的就是更改子组件的最后一行:
export default withRouter(connect<{}, {}, PropsToPass>(
mapStateToProps,
mapDispatchToProps
)(ChildComponent) as any);
到
export default withRouter<PropsToPass & RouteComponentProps>(connect<{}, {}, PropsToPass>(
mapStateToProps,
mapDispatchToProps
)(ChildComponent) as any);