TypeScript 当不使用React.Fragment时,JSX片段的类型是不正确的,

bpsygsoo  于 6个月前  发布在  TypeScript
关注(0)|答案(4)|浏览(78)

Bug报告

🔎 搜索词

React Fragment

🕗 版本与回归信息

我认为这是由于React的变化而引起的新的不一致性。

⏯ Playground链接

https://github.com/gkemp94/test-typescript-fragment

代码

import React from "react";

const test = () => "asd";

// No Errors
const jsxWithJsxFragment = <>{test}</>;

// Type '() => string' is not assignable to type 'ReactNode'.
const jsxWithReactFragment = <React.Fragment>{test}</React.Fragment>;

🙁 实际行为

当使用 <><React.Fragment> 时,子元素没有得到正确的类型检查。

🙂 预期行为

当指定 jsx: react 时,对 <> 的类型检查应与 React.Fragment 相同。

hmmo2u0o

hmmo2u0o2#

@RyanCavanaugh 是否应该将 JsxOpeningFragment 纳入 CallLikeExpression?
TypeScript/src/compiler/types.ts
第2802行至第2808行
| | exporttypeCallLikeExpression= |
| | |CallExpression |
| | |NewExpression |
| | |TaggedTemplateExpression |
| | |Decorator |
| | |JsxOpeningLikeElement |
| | ; |
它没有 tagName(我们在 JsxOpeningLikeElement 中用于解析调用)*和其他常见的 CallLikeExpression 属性 - attributes,typeArguments 等。
或者我们需要制作一种特殊的片段工厂(具有合成名称)调用解析吗?

8aqjt8rx

8aqjt8rx3#

听起来答案是"是的,它应该是一个类似调用的表达式",但你还需要虚拟化一个目标。我不知道我们是否还在做这件事,但我们有像getEffective____这样的助手来获取我们应该检查的参数。

ebdffaop

ebdffaop4#

这个问题是否可以通过类似#51328的方式来解决?库/类型可以在定义JSX.ElementType之外,还可以定义类似于JSX.FragmentType的内容,并对其JSX拥有完全的控制权。

相关问题