javascript - StoreEnhancer 的 TypeScript 定义阻止了剩余参数
问题描述
我正在使用 React-Redux 设置应用程序并配置商店,类似于此处显示的指南
这是我的代码:
import { applyMiddleware, compose, createStore } from 'redux';
import thunkMiddleware from 'redux-thunk';
import rootReducer from '../reducers/reducers'
export default function configureStore() {
const middlewares = [thunkMiddleware];
const middlewareEnhancer = applyMiddleware(...middlewares);
const enhancers = [middlewareEnhancer];
const composedEnhancers = compose(...enhancers);
const preloadedState = (<any>window).__PRELOADED_STATE__;
delete (<any>window).__PRELOADED_STATE__;
const store = createStore(rootReducer, preloadedState, composedEnhancers);
return store;
}
但是,当我运行 build 时,我不断收到以下 Typescript 错误
TS2345: Argument of type '(...args: any[]) => {}' is not assignable to parameter of type 'StoreEnhancer<{}, {}>'.
我很困惑。Redux 的声明文件不是声明(如下所示)StoreEnhancer 只是将 Store 和 State 扩展作为空的普通对象接收吗?
export type StoreEnhancer<Ext = {}, StateExt = {}> = (next: StoreEnhancerStoreCreator) => StoreEnhancerStoreCreator<Ext, StateExt>
如果是这样,即使我在配置文件中将“noImplicitAny”属性设置为“true”,为什么它不接受其余参数中的“Any”类型,如下所示?
(据我所知,其余参数无论如何都无法接收声明的类型。)
我错过了什么?
另外,我正在使用以下软件包版本:
“反应”:“^16.4.2”,
“redux”:“^4.0.0”,
“redux-thunk”:“^2.3.0”,
“webpack”:“^4.16.5”,
“真棒打字稿” -loader”:“^5.2.0”、
“typescript”:“^3.0.3” 、
“@types/react”:“^16.4.12”、
“@types/redux”:“^3.6.0”、
“ @types/redux-thunk": "^2.1.0"
使用以下 TS 配置设置:
"compilerOptions": {
* "outDir": "./dist/",
* "sourceMap": true,
* "noImplicitAny": true,
* "module": "esnext",
* "target": "esnext",
* "jsx": "react",
* "moduleResolution": "node",
* "noUnusedLocals": true,
* "noUnusedParameters": true,
* "strict": true,
* "esModuleInterop": false,
* "noFallthroughCasesInSwitch":真,
*“allowSyntheticDefaultImports”:真
}
解决方案
问题是返回类型composedEnhancers
是{}
,而createStore
期望它是StoreEnhancerStoreCreator<{}, {}>
。并且返回类型{}
来自您对 的调用,这与类型声明compose
中的此重载相匹配,因为您正在传播增强器数组:
export function compose<R>(...funcs: Function[]): (...args: any[]) => R;
如果不指定R
,则默认为{}
。因此,除非您确实需要动态增强器数组,否则请指定R
或仅使用。compose(middlewareEnhancer)
推荐阅读
- css - 使按钮粘在页面底部*但*尊重滚动
- angular - Angular 6 中的多 ./styles.css 中的错误
- php - 在 Woocommerce 中获取具有特定产品属性的产品购买总数
- javascript - Meteor 应用程序上 React JS 中的访问控制允许来源
- javascript - 如何使用react js过滤html表的所有列?
- angular - 如何在按钮单击时添加新功能
- angular - 如何在 Angular 材料 6 表中使用 colspan 和 ngFor?
- elasticsearch - 使用java客户端Api时如何将_delete_by_query限制为单一类型
- django - 在 Eclipse 中运行 django 服务器时出错
- c++ - 将 c++ 结构转换为 c# 结构。错误输出