1

我有一个带有React, Redux, Immutable.js+的配置项目TypeScript。在实现过程中,我试图尽可能多地声明类型并发现了有趣的问题。请参见下面的代码示例:

redux store 的简短配置

import { createStore } from 'redux';
import { combineReducers } from 'redux-immutable';

const rootReducer = combineReducers({...});
const store = createStore(rootReducer);

组件内部某处

// ...
const mapStateToProps = (state: ReturnType<typeof rootReducer>) => {
  // state is plain object :(
};

在 VS Code 中状态悬停时,工具提示显示状态是一个普通对象,但它不是。它应该是来自的自定义集合Immutable.js

我怎样才能得到正确的类型rootReducer?或者我做错了什么?

截图:

将鼠标悬停在状态变量上

将鼠标悬停在强调的 get 方法上

PSStateTypeReturnType做同样的事情

4

2 回答 2

0

这有效(不需要 Immutable.js):

export type RootState = ReturnType<typeof rootReducer>;

如果由于某种原因它不起作用,这个应该起作用:

export type RootState = ReturnType<typeof store.getState>
于 2021-10-04T12:07:57.457 回答
0

我花了很多时间寻找如何成对TypeScript工作的解决方案,Immutable.js不幸的是没有明确/微不足道的解决方案(或者我没有找到)。

如果您刚开始项目并正在寻找一些替代方案,我强烈建议您查看Immer库。它提供了几乎相同的功能并且完美地支持TypeScript打字。

于 2019-05-15T15:05:12.993 回答