升级到TypeScript4.4.2后报'JSX' is not defined no-undef错误如何解决
解决方案
- 禁用ESLint原生
no-undef规则
原生no-undef规则不识别TypeScript的类型声明语法、全局类型定义以及.d.ts文件中的声明内容,在.eslintrc(或.eslintrc.js等对应配置文件)的rules字段中关闭该规则即可,未定义变量的校验可直接使用TypeScript自身的编译检查能力:
{ "rules": { "no-undef": "off" } }
如果需要保留ESLint层面的未定义校验,可以开启适配TS语法的@typescript-eslint/no-undef规则:
{ "rules": { "no-undef": "off", "@typescript-eslint/no-undef": "error" } }
- 针对.d.ts声明文件添加特殊配置
在.eslintrc的overrides字段中单独对声明文件设置规则豁免,同时确认tsconfig.json的include数组包含了declarations.d.ts文件,保证TypeScript可以正常识别文件内的全局声明:
ESLint配置示例:
{ "overrides": [ { "files": ["**/*.d.ts"], "rules": { "no-undef": "off" } } ] }
tsconfig.json配置示例:
{ "include": ["src/**/*", "declarations.d.ts"] }
- 修复
JSX is not defined报错
检查tsconfig.json的compilerOptions下的jsx配置是否正确,React项目推荐设置为react-jsx(适配React17+的新JSX转换)或react,同时确保@types/react依赖版本适配TypeScript 4.4,建议升级到17.0.2及以上版本。
如果你的项目中存在自定义全局JSX类型声明,需要确保声明包裹在declare global块中,符合TypeScript 4.4的全局声明规范:
declare global { namespace JSX { interface IntrinsicElements { // 自定义元素声明内容 } } }
内容的提问来源于stack exchange,提问作者jacobcan118
相关产品推荐
相关产品推荐

