Definitelytyped: [@types/react]:React.Fragment 没有任何构造或调用签名

创建于 2017-12-03  ·  3评论  ·  资料来源: DefinitelyTyped/DefinitelyTyped

  • [x] 我尝试使用@types/react包但遇到了问题。
  • [x] 我尝试使用最新的稳定版 tsc。 https://www.npmjs.com/package/typescript
  • [x] 我有一个不适合StackOverflow 的问题。 (请在那里提出任何适当的问题)。
  • [x] [提及](https://github.com/blog/821-mention-somebody-they-re-notified) 作者(见Definitions by:中的index.d.ts )所以他们可以回应。

    • 作者: @uniqueiniquity@tkrotoff@vsiao

在#21146 中有一些关于React.Fragment正确类型的讨论,但是虽然symbol | number可能准确地反映了Fragment的内部 React 类型,但它阻止了React.Fragment从被用作 TSX 元素。

<React.Fragment> // error here: React.Fragment does not have any construct or call signatures
  <div>Child 1</div>
  <div>Child 2</div>
</React.Fragment>

我意识到我们可以使用<></>语法渲染片段,但是 React 文档声明这只是将糖去除为<React.Fragment></React.Fragment>并且这是向片段添加键的唯一方法

因此,我认为React.Fragment应该更改为更接近React.ComponentType<{}> ,这会给它keychildren道具。

如果人们同意这个提议,我可以打开 PR。

最有用的评论

@uniqueiniquity听起来不错。 如果在 TS 中修复它是不可能/不可行的,我有一个准备好去的分支。

所有3条评论

感谢您捕捉到这个,@jgoz!
我认为更好的方法可能是我们在 TypeScript 方面解决这个问题,而不是改变React.Fragment来绕过编译器的行为。
我会研究这个,看看这是否是最好的方法。

@uniqueiniquity听起来不错。 如果在 TS 中修复它是不可能/不可行的,我有一个准备好去的分支。

@jgoz继续并打开 PR。 经过这里的一些讨论,听起来您暂时有正确的方法。

此页面是否有帮助?
0 / 5 - 0 等级