Javascript 是否可以防止JSX注释添加';儿童';元素,潜在的破坏类型?
假设我有这样一个第三方库:Javascript 是否可以防止JSX注释添加';儿童';元素,潜在的破坏类型?,javascript,reactjs,typescript,jsx,Javascript,Reactjs,Typescript,Jsx,假设我有这样一个第三方库: 声明var SomeComponentFromLibrary:React.FC; 其中子元素被定义为React.React元素,我无法改变这一事实 现在,假设我使用它,使用一个组件,该组件碰巧生成了一个类型错误,我希望暂时抑制该错误: {/*@ts预期错误*/} 这在SomeComponentFromLibrary的子项中创建了两项(遗憾的是,注释{}和类型脚本注释指令对JSX不太友好。但您肯定可以让它工作 给它一个子元素,用大括号括起来,{},注释用大括号括起
声明var SomeComponentFromLibrary:React.FC;
其中子元素
被定义为React.React元素
,我无法改变这一事实
现在,假设我使用它,使用一个组件
,该组件碰巧生成了一个类型错误,我希望暂时抑制该错误:
{/*@ts预期错误*/}
这在
SomeComponentFromLibrary
的子项中创建了两项(遗憾的是,注释{}
和类型脚本注释指令对JSX不太友好。但您肯定可以让它工作
给它一个子元素,用大括号括起来,{}
,注释用大括号括起来
<SomeComponentFromLibrary>
{/* @ts-expect-error */
<MyComponent />
}
</SomeComponentFromLibrary>
{/*@ts预期错误*/
}
另外,旁注:SomeComponentFromLibrary
的键入可能是错误的。在我所见过的几乎所有情况下,子项
都应键入为React.ReactNode
。当您这样键入此函数时,它将
所以我可能会为这个库创建一个pull请求来修复它。看起来这是一个bug:
它在这里是固定的:应该在4.1或4.2中发布-(据我所知,{null/*comment*/}
或React.ReactElement[]
,非常确定您将无法以其他方式解决此问题:-(据我所知,{/*…*/}
对发送到组件的内容没有任何影响:例如,它不会使您的示例中有多个子项。只有一个子项:
(我必须尝试确保::-)@t.J.Crowder,啊,您是对的!我得到了导出默认值()=>(React.createElement(SomeComponentFromLibrary,null,React.createElement(MyComponent,null));
没有传递额外的子项!这一定是TS的问题,而不是JSX->JS编译?如果你真的因为它而出错,是的,这看起来像是一个bug或是他们还没有实现的功能。(我可以发誓{/*…*/}
以前在JSX中不起作用——表达式过去必须有一个值——但它最近起作用了,所以……)您需要再次检查您是否完全掌握了TS的最新信息。:-)
<SomeComponentFromLibrary>
{/* @ts-expect-error */
<MyComponent />
}
</SomeComponentFromLibrary>