TS2339报错:NodeRequire类型上不存在context属性该如何解决
这个报错是TypeScript没有加载webpack提供的require.context方法的类型定义导致的,即使你已经安装了@types/webpack-env依赖,也需要额外配置才能让TS识别到对应类型,可通过以下几种方案解决:
方案1:配置tsconfig.json加载类型(推荐,从根源解决报错)
打开项目根目录的tsconfig.json文件,在compilerOptions字段中添加types配置,引入webpack-env的类型声明:
{ "compilerOptions": { // 其他原有配置保留 "types": ["webpack-env"] } }
如果原配置里已经有types数组,直接把"webpack-env"追加到数组末尾即可,配置完成后重启TS服务或者编辑器即可生效。
方案2:通过类型断言快速绕过
如果不想修改配置,或者配置后仍然不生效,可以直接通过类型断言绕过TS校验,运行时不会受任何影响,修改报错代码如下:
const movieThumbImages = importAll( // 将require断言为any类型,跳过属性校验 (require as any).context("../../assets/moviePosterImages", false, /\.(png|jpe?g|svg)$/) );
方案3:手动扩展类型声明
如果上面两种方案都不符合你的需求,可以手动全局扩展NodeRequire的类型,在src目录下新建一个typings.d.ts文件,写入以下内容:
declare interface NodeRequire { context: (path: string, recursive?: boolean, regExp?: RegExp) => any; }
保存后TS会自动加载这个全局类型声明,后续所有使用require.context的地方都不会再报这个错。
内容的提问来源于stack exchange,提问作者mfaccord
相关产品推荐
相关产品推荐

