当前位置: 首页 > 知识库问答 >
问题:

StoreEnhancer的TypeScript定义阻止rest参数

井旺
2023-03-14

我正在用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>

如果是这样,为什么它不接受rest参数中的“Any”类型,即使我在配置文件中将“noImplicitAny”属性设置为“true”,如下所示?

(据我所知,rest参数无论如何都不能接收声明的类型。)

我错过了什么



此外,我正在使用以下软件包版本:

"redux":"^16.4.2",
"redux":"^4.0.0",
"redux-thunk":"^2.3.0",
"webpack":"^4.16.5",
"awy-typecript-loader":"^5.2.0",
"typecript":"^3.0.3"
"@类型/反应":"^16.4.12"",
"@类型/redux":"^3.6.0",
"@类型/redux-thunk":"^2.1.0"

使用以下TS配置设置:

编译器选项:{
*“outDir”:“/dist/”,
*“sourceMap”:true,
*“noImplicitAny”:true,
*“module”:“esnext”,
*“target”:“esnext”,
*“jsx”:“react”,
*“moduleResolution”:“node”,
*“noUnusedLocals”:true,
*“noUnusedParameters”:true,
*“noUnusedParameters”:true,
*“strict”:true,
*“true,
*“esmodulep”:false,
*“noFallthroughCasesInSwitch”:true,
*“allowSyntheticDefaultImports”:true
}

共有1个答案

贺元明
2023-03-14

问题是,Comported增强器返回类型是{},而createStore期望它是StoreEnhancerStoreCreator

export function compose<R>(...funcs: Function[]): (...args: any[]) => R;

如果不指定R,则默认为{}。所以要么指定R,要么只使用compose(middlewareEnhancer),除非你真的需要一个动态的增强子数组。

 类似资料:
  • 问题内容: 这个问题解决了。 我正在开发一个基于Java Swing的项目,并且该应用程序的外观是完全自定义的。我们试图在整个程序中保持一致的外观,并且默认的Java对话框窗口不同。 当前问题要求控件禁止调用用户提示。与JOptionPane.showConfirmDialog()相似,在这种情况下,静态调用将产生一个窗口,并暂停程序的流程,直到用户选择一个选项为止。它还返回选项的值。请注意,GU

  • 我有一种情况,我可以使用阻塞I/O库访问外部服务上的RESTendpoint,或者在这种情况下,我可以直接使用HttpClient(如WebClient)调用REST。现在,我想知道在包装对该库的调用和将其发布到弹性线程或使用WebClient访问endpoint之间是否存在性能差异。 如何准确地处理调用这两个选项。所以我们假设网络流量使用单线程来处理请求。然后,请求将由WebClient处理。这

  • 问题内容: 是否有可能做出无法逃脱和?我目前得到: 但我正在寻找这样的事情: 问题答案: 从Go 1.7开始,您仍然 无法使用json.Marshal()做到​​这一点 。json.Marshal的源代码显示: json.Marshal总是这样做的原因是: 字符串值编码为强制转换为有效UTF-8的JSON字符串,用Unicode替换符文替换无效字节。尖括号“ <”和“>”转义为“ \ u003c”

  • 在TypeScript中,可以用“Rest参数”声明函数: 假设我声明了另一个调用的函数: 编译器产生以下消息: 提供的参数与调用目标的任何签名都不匹配:无法将类型“string”应用于类型为“string[]”的参数2。 如何才能调用将提供的参数?

  • 问题内容: 我对Go如何处理非阻塞IO感到困惑。API在我看来基本上是同步的,并且在Go上观看演示时,听到诸如“和调用块”之类的注释并不罕见。 从文件或网络读取时,Go是否使用阻塞IO?还是当在Go Routine中使用某种魔术来重写代码? 来自C#背景,这感觉非常不直观,在C#中,当使用异步API时我们使用了关键字。这清楚地表明,API可以产生当前线程,并在以后的延续中继续。 因此,TLDR;当

  • 问题内容: 无法致电Spring REST服务 我的春季服务 我的AJAX代码 我收到以下错误:( 跨域请求被阻止:同源策略禁止读取位于http:// localhost:8080 / SpringMVC / rest / MAS / authenticate 的远程资源。可以通过将资源移到同一域或启用CORS来解决此问题。 我也尝试过。它将我的body对象附加到URL中,URL变为不同的URL,