【发布时间】:2022-06-20 19:23:09
【问题描述】:
我有一个无法编译的 React Typescript 应用程序。许多组件都有一个渲染方法,该方法被键入以返回React.ReactNode 或React.ReactElement。编译时报很多类似下面的错误:
TS2786: 'MessagesWidget' cannot be used as a JSX component.
Its instance type 'MessagesWidget' is not a valid JSX element.
The types returned by 'render()' are incompatible between these types.
Type 'React.ReactNode' is not assignable to type 'import("/home/node/app/node_modules/@types/react-calendar/node_modules/@types/react/index").ReactNode'.
为什么编译器期望 ReactNode 由与 react-calendar 捆绑的类型定义?我确实安装了 @types/react-dom 作为开发依赖项。
其他可能相关的信息:
- 这个项目直到几天前还在编译,当编译开始失败时没有代码更改,所以我怀疑包更新触发了这个(即使这不是根本原因)。在编译开始失败的时间窗口中更新的唯一依赖项是
@types/react和@types/react-dom。但是,将这些软件包回滚到旧版本并不能解决问题。 - 将我的组件渲染方法更改为返回
JSX.Element可消除编译器错误,但应用程序中有第三方组件无法做到这一点。
【问题讨论】:
-
React.ReactNode绝对是 react 组件的render方法的正确返回类型,所以这很奇怪。但如果没有a minimal example,,我不确定我们是否能帮上大忙。 -
我今天弹出了完全相同的问题,除了我的导入来自
react-dom或react-transition-group。 types 包肯定有问题。在此期间我刚刚添加了@ts-ignore。 -
我们在我们的项目中看到了这一点。我会努力将@types 修复为旧版本。
标签: reactjs typescript react-dom tsx