next-redux-wrapper中MakeStore报需1个类型参数TS2314错误
问题描述
使用next-redux-wrapper配置store时出现TypeScript报错,报错信息:
Generic type 'MakeStore' requires 1 type argument(s) .ts(2314)
原configureStore.ts文件代码如下:
import { configureStore, EnhancedStore, getDefaultMiddleware, } from '@reduxjs/toolkit'; import { MakeStore } from 'next-redux-wrapper'; import { Env } from '../constants'; import { rootReducer, RootState } from './reducers'; import logger from 'redux-logger'; const store = configureStore({ reducer: rootReducer, middleware: (getDefaultMiddleware) => getDefaultMiddleware() .concat(logger), devTools: Env.NODE_ENV === 'development', }); export const makeStore: MakeStore = (_?: RootState): EnhancedStore => store;
报错原因
next-redux-wrapper 中导出的MakeStore是泛型类型,要求必须传入1个类型参数(对应store的根state类型),原代码直接使用无泛型参数的MakeStore做类型标注,不符合类型定义要求,因此触发TS2314错误。
修复方法
给MakeStore传入已定义的RootState作为泛型参数即可,同时可以删掉冗余的EnhancedStore返回值标注,TS会自动从configureStore的返回结果推导正确的store类型。
修复后的代码:
import { configureStore, } from '@reduxjs/toolkit'; import { MakeStore } from 'next-redux-wrapper'; import { Env } from '../constants'; import { rootReducer, RootState } from './reducers'; import logger from 'redux-logger'; const store = configureStore({ reducer: rootReducer, middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(logger), devTools: Env.NODE_ENV === 'development', }); // 传入RootState作为MakeStore的必填泛型参数 export const makeStore: MakeStore<RootState> = (_?: RootState) => store;
注:原代码顶部冗余导入的getDefaultMiddleware、EnhancedStore没有实际使用,可以直接删除,不会影响功能。
内容的提问来源于stack exchange,提问作者Abdul Mahamaliyev
相关产品推荐
相关产品推荐

