微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 Flow 转换为 TS - 从已安装的库中导入时“组件不能用作 JSX 组件”

如何解决将 Flow 转换为 TS - 从已安装的库中导入时“组件不能用作 JSX 组件”

我最近开始将带有 Flow 类型代码库的旧 React 15 转换为带有 TS 的最新 CRA。我使用 flow-to-ts script 来转换所有文件

从已安装的包中导入要在组件的渲染功能中使用的组件时,我在整个代码库中都遇到了 Typescript 错误

这是从react-router-dom包导入的路由器组件

'Router' cannot be used as a JSX component.
  Its instance type 'Router' is not a valid JSX element.
    The types returned by 'render()' are incompatible between these types.
      Type 'ReactNode' is not assignable to type 'false | Element | null'.ts(2786)

但是当它在渲染函数中时,您可以将“路由器”替换为项目中任何组件的名称。从另一个文件导入样式组件时,我也会得到它。看到它是非常全局的,这让我认为这是一个配置问题,很难找到或被与旧流程代码有关的东西覆盖。请注意,我创建了一个全新的项目并复制了我需要的内容,而没有在其中安装每个 Flow,我遇到了同样的问题。在我看来,编译器认为每个组件都是某种函数

This post here is what I thought it must be@react/types 的多个版本之间存在冲突,但是当列出它们时,只有根版本,用于测试。我也使用了分辨率,但没有区别。但有些事情列出了这个原因对我来说更有意义

是否有一些我遗漏的 .d.ts 设置,或者强制编译器知道它们是有效组件的方法

I also thought it would be something like this 并尝试将组件包装在我的组件内的片段中,但它仍然相同,并且我无法在导入之前将外部库中的所有组件更改为包装在片段中。

我安装了所有类型文件并且它们都是最新的。

这里是 tsconfig 供参考:

{
  "compilerOptions": {
    "baseUrl": ".","outDir": "build/dist","module": "esnext","target": "es5","lib": [
      "es6","dom"
    ],"sourceMap": true,"allowJs": true,"jsx": "react-jsx","moduleResolution": "node","rootDir": "src","forceConsistentCasingInFileNames": true,"noImplicitReturns": true,"noImplicitThis": true,"noImplicitAny": true,"importHelpers": true,"strictnullchecks": true,"suppressImplicitAnyIndexErrors": true,"esModuleInterop": true,"allowSyntheticDefaultImports": true,"skipLibCheck": true,"strict": true,"noFallthroughCasesInSwitch": true,"resolveJsonModule": true,"isolatedModules": true,"noEmit": true,"noUnusedLocals": false,"noUnusedParameters": false
  },"exclude": [
    "node_modules","build","scripts","acceptance-tests","webpack","jest","src/setupTests.ts","src/redux/*","craco.config.ts"
  ],"include": [
    "src"
  ]
}

而且我也尝试了认的 CRA tsconfig

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。