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
相同。
4条答案
按热度按时间sqyvllje1#
Playground链接
hmmo2u0o2#
@RyanCavanaugh 是否应该将
JsxOpeningFragment
纳入CallLikeExpression
?TypeScript/src/compiler/types.ts
第2802行至第2808行
| | exporttypeCallLikeExpression= |
| | |CallExpression |
| | |NewExpression |
| | |TaggedTemplateExpression |
| | |Decorator |
| | |JsxOpeningLikeElement |
| | ; |
它没有
tagName
(我们在JsxOpeningLikeElement
中用于解析调用)*和其他常见的CallLikeExpression
属性 -attributes
,typeArguments
等。或者我们需要制作一种特殊的片段工厂(具有合成名称)调用解析吗?
8aqjt8rx3#
听起来答案是"是的,它应该是一个类似调用的表达式",但你还需要虚拟化一个目标。我不知道我们是否还在做这件事,但我们有像
getEffective____
这样的助手来获取我们应该检查的参数。ebdffaop4#
这个问题是否可以通过类似#51328的方式来解决?库/类型可以在定义
JSX.ElementType
之外,还可以定义类似于JSX.FragmentType
的内容,并对其JSX拥有完全的控制权。