React/TypeScript构建报TS2304找不到Fragment、TS5052错误咨询
错误原因
两个报错本质都是tsconfig.build.json中的错误JSX配置导致的连锁问题:
- TS5052配置错误触发原因
构建使用的tsconfig.build.json中手动设置了"jsxFactory": ""空值。microbundle构建时依赖的rpt2(rollup-plugin-typescript2)插件在处理jsx: "react"模式的TS文件时,会默认注入jsxFragmentFactory的默认配置;而TypeScript的校验规则明确要求:只要指定了jsxFragmentFactory配置,就必须同时指定合法非空的jsxFactory值,空字符串属于无效配置,直接触发TS5052报错。 - TS2304找不到Fragment错误触发原因
由于jsxFactory配置无效,TypeScript无法按照经典React JSX模式解析代码中的短片段语法<></>。在正常的jsx: react模式下,<></>会被编译为React.Fragment,但配置失效后TS不会自动关联React导出的Fragment,就会抛出找不到名称Fragment的语义错误,报错指向的9行位置正好是代码中第一处使用<>...</>短片段语法的位置。
修复方法
- 直接删除
tsconfig.build.json中多余的"jsxFactory": ""配置项即可。你当前使用React 17版本对应的经典JSX运行时,TS默认的jsxFactory值就是React.createElement、jsxFragmentFactory默认值就是React.Fragment,不需要手动覆盖为空。 - 如果后续有自定义JSX工厂函数的需求,必须成对配置两个参数,比如经典React模式下的完整配置为:
{ "compilerOptions": { "jsx": "react", "jsxFactory": "React.createElement", "jsxFragmentFactory": "React.Fragment" } }
修改配置后重新执行yarn build命令即可正常构建。
内容的提问来源于stack exchange,提问作者Ludwig
相关产品推荐
相关产品推荐

