我有一个用React 18做的@company/module
,但主项目仍然使用React 17。现在,如果我导入这个模块,tsc在主项目上失败,因为使用了它的@types/react v17.0.44,它不包括React 18的新类型。
错误是:Module "react" has no exported member 'useId'
- 有没有办法在不将主项目升级到React 18的情况下解决这个问题?
- 我怎样才能使tsc使用@types/react来相应地对模块进行响应?
我有skipLibCheck: true
,它仍然检查模块并失败。
这是完整的tsconfig:
{
"allowSyntheticDefaultImports": true,
"compilerOptions": {
"target": "es6",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": false,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"baseUrl": ".",
"downLevelIteration": true,
"paths": {
"~/*": ["src/*"]
},
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}
1条答案
按热度按时间hfsqlsce1#
这个问题的一个可能的解决方案是在package.json文件中使用像patch-package或resolutions这样的包来覆盖主项目使用的@types/react版本。
例如,您可以在package.json中添加resolutions字段,如下所示:
这将强制您的主项目使用版本18的@types/react,即使它以前使用的是版本17。
或者,您可以尝试在模块的代码中使用仅类型导入,以避免从React 18导入导致问题的新类型。例如,可以将import语句更改为:
这将只导入UseIdHook的类型,而不实际导入实现,这应该允许代码编译而不会出错。
希望这能帮上忙