Reactjs React createContext和useReducer未定义值错误

Reactjs React createContext和useReducer未定义值错误,reactjs,typescript,react-hooks,Reactjs,Typescript,React Hooks,我有一个React typescript项目,我正在处理这个项目,并且在上下文API方面遇到了一些问题 我尝试将不同的类型传递给createContext方法,这些类型都按预期工作。但是,当我尝试使用useReducerhook时,会出现以下错误: Syntax error: Cannot read property 'map' of undefined (0:undefined) 我已将默认值作为空对象传入,如下所示(我有一种感觉,这就是我得到错误的地方,但此方法以前对我有效): 下面是我实

我有一个React typescript项目,我正在处理这个项目,并且在上下文API方面遇到了一些问题

我尝试将不同的类型传递给
createContext
方法,这些类型都按预期工作。但是,当我尝试使用
useReducer
hook时,会出现以下错误:

Syntax error: Cannot read property 'map' of undefined (0:undefined)
我已将默认值作为空对象传入,如下所示(我有一种感觉,这就是我得到错误的地方,但此方法以前对我有效):

下面是我实现的reducer,它被传递给
useReducer
hook:

export type DispatchReturn = {
    [key: string]: User | string;
    type: string;
}

export const AppContextReducer = (state: AppContextSchema, payload: DispatchReturn): AppContextSchema => {
    switch (payload.type) {
        case UPDATE_USER:
            return {
                ...state,
                user: { ...(payload.user as User) }
            };
        default:
            return state;
    }
}
最后,在这里我将值传递给
AppContext.Provider

function App() {
return (
    <AppContext.Provider value={useReducer(AppContextReducer, InitializeContext())}>
        <div className="App">
            ...
        </div>
    </AppContext.Provider>
 );
}
函数应用程序(){
返回(
...
);
}

如能提供任何帮助,我们将不胜感激。提前谢谢你

事实证明,这是Typescript、@typscript eslint/eslint plugin或@typscript eslint/parser或三者结合使用的问题

定义
上下文
类型时实际存在此问题
Context
是一个通用对象,它需要一个元组作为参数。无论出于何种原因,当将元组作为参数传递给
上下文
对象时,它抛出了上述错误。以下是导致错误的代码:

const AppContext: Context<[AppContextSchema, Dispatch<DispatchReturn>]> = ...
const-AppContext:Context=。。。
为了解决这个问题,我将我的Typescript版本降级为3.9.7

为了解决这个问题,我运行了以下命令:

  • npm卸载typescript
    删除typescript
  • npm安装typescript@3.9.7
    纱线添加typescript@3.9.7
  • rm包装.锁
    rm纱线.锁
  • rm-rf节点模块
  • npm安装
    纱线安装

  • 希望这能让人免于和我一样的头痛。

    如果我将上下文类型设置为
    any
    ,如图所示:
    const-AppContext:context=createContext([{}作为AppContextSchema,{}作为Dispatch])
    
    function App() {
    return (
        <AppContext.Provider value={useReducer(AppContextReducer, InitializeContext())}>
            <div className="App">
                ...
            </div>
        </AppContext.Provider>
     );
    }
    
    const AppContext: Context<[AppContextSchema, Dispatch<DispatchReturn>]> = ...