Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 组合传感器不';推断类型_Reactjs_Typescript_Redux - Fatal编程技术网

Reactjs 组合传感器不';推断类型

Reactjs 组合传感器不';推断类型,reactjs,typescript,redux,Reactjs,Typescript,Redux,我正在React-TypeScript应用程序中使用组合减速机: // combinedReducer.ts import { combineReducers } from 'redux' import reducer1 from './reducer1' import reducer2 from './reducer2' const combinedReducer = combineReducers({ reducer1, reducer2, }) export defau

我正在React-TypeScript应用程序中使用组合减速机:

// combinedReducer.ts
import { combineReducers } from 'redux'
import reducer1 from './reducer1'
import reducer2 from './reducer2'

const combinedReducer = combineReducers({
    reducer1,
    reducer2,
})

export default combinedReducer
据我所知,
组合减速器
应根据组合减速器推断其类型

然而,对我来说,即使每个组合减速器的返回类型已被识别,它也没有:

ReturnType
未知的

这里怎么了?

以下是我的最大简化减速机:

// reducer1.ts
const initialState: boolean = false

const reducer1 = (state = initialState): boolean => state

export default reducer1

确保Redux版本为4.0.0或更高版本。CombineReducer的类型映射在版本4.0.0中发布

您可以更新package.json文件:

...
"dependencies": {
   "redux": "^4.0.3"
}
...
然后运行npm安装以更新到最新版本


完成此更改后,请确保重新启动IDE以重新加载类型映射。

使用redux 4.0.5和typescript 4.0.1时,我遇到了同样的问题。我必须自己写一本推理书:

type BaseReducerMap<S> = {
    [K in keyof S]: (state: S[K], action: any) => S
}

export type InferRootState<ReducerMap extends BaseReducerMap<S>, S = any> = {
    [K in keyof ReducerMap]: ReturnType<ReducerMap[K]>
}
类型BaseReducerMap={
[K in keyof S]:(状态:S[K],操作:any)=>S
}
导出类型推断根状态={
[K减速器映射键]:返回类型
}
然后是一组减速器(在组合减速器之前)

常数减缩器={
登录名:loginReducer,
chatUsers:chatUsersReducer,
};
const combinedReducer=组合减速机(减速机);
导出类型状态=推断根状态;
然后typescript可以成功推断出我的
状态的类型。

我不知道为什么在这个版本中失败。

这不是Redux有问题。这是您的IDE/编辑器。从技术上讲,combineReducer可以返回任何内容,因此它的返回值不是专门键入的。您使用的任何编辑器都会查看该签名并试图对其进行解释。看到CombineReducer没有返回特定类型,它会向您报告它是“未知的”。我认为这与Redux没有任何关系。基于配色方案,看起来像IntelliJ?是的,我也遇到过问题,所以我对所有前端都使用VSCode,它似乎处理得更好。好吧,看看redux文档:他们像我一样使用
createReducer
,但返回类型为
RootState=ReturnType
。当我这样做时,我得到
。这不仅仅是IDE,我不能运行我的代码,因为tslint在抱怨。AFAIK IDE也从那里获取信息。据我所知,
combineReducers
收集了多个与它们要修改的全局存储属性同名的reducer函数。谢谢!那是一种严肃的字体。这对我很有用。
type BaseReducerMap<S> = {
    [K in keyof S]: (state: S[K], action: any) => S
}

export type InferRootState<ReducerMap extends BaseReducerMap<S>, S = any> = {
    [K in keyof ReducerMap]: ReturnType<ReducerMap[K]>
}
const reducers = {
    login: loginReducer,
    chatUsers: chatUsersReducer,
};
const combinedReducer = combineReducers(reducers);

export type State = InferRootState<typeof reducers>;