使用 react-redux 连接功能时渲染组件上的打字稿错误

Posted

技术标签:

【中文标题】使用 react-redux 连接功能时渲染组件上的打字稿错误【英文标题】:Typescript error on rendered component when using react-redux connect function 【发布时间】:2018-06-27 01:55:58 【问题描述】:

我有一个组件类,我正在使用 react-redux 连接 redux 存储,但是当我尝试将组件传递给连接函数时出现错误。

class FileItem extends Component<IFileItemProps, undefined> 


const mapStateToProps = (state: IFileItemReduxState): IFileItemReduxProps => 
;

const mapDispatchToProps = (dispatch: Dispatch): IFileItemDispatchProps => 
;

// This FileItem component passed into the below parameter is where I am getting the error

export default connect<IFileItemReduxProps, IFileItemDispatchProps, IFilePassedProps, IFileItemReduxState>(mapStateToProps, mapDispatchToProps)(FileItem);

这些是我正在使用的每个接口(除了来自 redux 的 Dispatch):

export interface IFileItemProps 
    file: FileDirectoryNode;
    fileExplorerInfo: FileExplorerReducerState;
    selectFile: (file: FileDirectoryNode) => void;
    openFile: (file: FileDirectoryNode) => void;


export interface IFilePassedProps 
    file: FileDirectoryNode;


export interface IFileItemReduxState 
    fileExplorer: FileDirectoryTree;


export interface IFileItemReduxProps 
    fileExplorerInfo: FileDirectoryTree;


export interface IFileItemDispatchProps 
    selectFile: (file: FileDirectoryNode) => void;
    openFile: (file: FileDirectoryNode) => void;

IFileItemProps:组件将使用的所有类型

IFilePassedProps:这些是从父组件传入组件的props, 所以我在渲染的组件元素上看不到打字问题。

IFileItemReduxState:从 react-redux 传递给 mapStateToProps 的状态。

IFileItemReduxProps:从 react-redux 的 mapStateToProps 返回的 props。

IFileItemDispatchProps:从 react-redux 的 mapDispatchToProps 返回的 props。

据我了解,连接函数的类型如下:

connect<TReturnedMapStateToProps = , TReturnedMapDispatchToProps = , TPassedFromOutsideProps= , TReduxState = >

但是当我这样做时,我收到如下错误:

【问题讨论】:

【参考方案1】:

乍一看,我发现你的 IFileItemProps 和 IFileItemReduxProps 接口中属性 'fileExplorerInfo' 的类型是不同的。

你的意思是说 FileDirectoryTree 或 FileExplorerReducerState 的类型吗?

话虽如此,我遇到了一个类似的问题,即我的组件签名不匹配。幸运的是我没有传递道具,所以我把它修好了

class FileItem extends Component<IFileItemProps &
                                 IFileItemReduxProps & 
                                 IFileItemDispatchProps, undefined> 

const mapStateToProps = (state: IFileItemReduxState): IFileItemReduxProps =>;

const mapDispatchToProps = (dispatch: Dispatch): IFileItemDispatchProps => ;

export default connect(mapStateToProps, mapDispatchToProps)(FileItem);

希望这会有所帮助:)

【讨论】:

以上是关于使用 react-redux 连接功能时渲染组件上的打字稿错误的主要内容,如果未能解决你的问题,请参考以下文章

react-redux:在 API 调用后渲染组件

强烈键入 react-redux 与 typescript 连接

使用 react-redux、reselect 和 React.memo() 来记忆功能组件

使用 react-routerv4 从 react-redux 应用程序中的状态渲染组件时出现 404 错误?

将酶.mount().setProps 与 react-redux Provider 一起使用

使用异步操作时,React-Redux组件测试失败