TS2702报错:EmployeeContext仅为类型却被用作命名空间如何解决
报错原因
该错误ts(2702)的核心成因是TypeScript仅检索到了EmployeeContext的类型定义,没有找到你通过React.createContext创建的可作为值调用的上下文实例对象,因此无法识别.Provider的调用语法。
解决方案
- 检查
EmployeeContext的定义文件,确保你是先定义上下文类型,再创建实例并导出实例,而非仅导出类型,参考正确写法:
// 定义上下文的TS类型 type Employee = { // 你的Employee字段定义 id: number name: string // ...其他字段 } type EmployeeContextType = { addEmployee: (emp: Omit<Employee, 'id'>) => void DefaultData: Record<string, any> sortedEmployees: Employee[] deleteEmployee: (id: number) => void updateEmployee: (id: number, emp: Partial<Employee>) => void } // 创建上下文实例并导出 export const EmployeeContext = React.createContext<EmployeeContextType>({ // 填入默认初始值 addEmployee: () => {}, DefaultData: {}, sortedEmployees: [], deleteEmployee: () => {}, updateEmployee: () => {} })
- 检查你使用Context的文件的导入语句,不要用仅导入类型的语法:
// 错误写法:仅导入类型,运行时不存在实际实例 import type { EmployeeContext } from './你的上下文文件路径' // 正确写法:导入实际的上下文实例 import { EmployeeContext } from './你的上下文文件路径'
- 修正你贴出的代码里的Provider语法错误:
value属性要写在Provider标签内部,且传递的对象要包裹一层对象字面量:
<EmployeeContext.Provider value={{ addEmployee, DefaultData, sortedEmployees, deleteEmployee, updateEmployee }} > {props.children} </EmployeeContext.Provider>
内容的提问来源于stack exchange,提问作者Azeem
相关产品推荐
相关产品推荐

