【发布时间】:2018-06-25 20:06:54
【问题描述】:
我在尝试为我的反应组件键入参数时遇到错误。我想在组件的 props 和 state 上输入哪些属性,但是当我使用 Redux 这样做时,当我将 mapStateToProps 传递给 connect 函数时出现错误。
这是组件代码:
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
import FileExplorer from '../components/file-explorer/file-explorer';
import { ISideMenu, ISideMenuState } from '../models/interfaces/side-menu';
class SideMenu extends Component<ISideMenu, ISideMenuState> {
render() {
return (
<div>
{this.props.fileExplorerInfo !== null &&
<FileExplorer fileExplorerDirectory={this.props.fileExplorerInfo.fileExplorerDirectory}/>
}
</div>
);
}
}
const mapStateToProps = (state: ISideMenuState) => {
return {
fileExplorerInfo: state.fileExplorer
};
};
export default connect<ISideMenu, null, ISideMenuState>(mapStateToProps)(SideMenu);
所以错误发生在这一行:
export default connect<ISideMenu, null, ISideMenuState>(mapStateToProps)(SideMenu);
当我将鼠标悬停在该行中的“mapStateToProps”一词上时,我看到了错误:
Argument of type '(state: ISideMenuState) => { fileExplorerInfo: FileDirectoryTree | null; }'
is not assignable to parameter of type 'MapStateToPropsParam<ISideMenu, ISideMenuState, {}>'.
Type '(state: ISideMenuState) => { fileExplorerInfo: FileDirectoryTree | null; }' is not
assignable to type 'MapStateToProps<ISideMenu, ISideMenuState, {}>'.
Types of parameters 'state' and 'state' are incompatible.
Type '{}' is not
assignable to type 'ISideMenuState'.
Property 'fileExplorer' is missing in type '{}'.
这是我在 react 组件中使用的两个接口:
export interface ISideMenu {
fileExplorerInfo: FileExplorerReducerState | null;
}
export interface ISideMenuState {
fileExplorer: FileDirectoryTree | null;
}
任何对此错误的见解将不胜感激!
【问题讨论】:
-
这里的
(state: ISideMenuState)应该是你的 redux 存储状态类型,而不是组件状态 -
其实你的代码有问题
-
@Topsy 有 10 个不同的签名。github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/…
标签: javascript reactjs typescript redux react-redux