功能组件类型的问题
我为文本突出显示的文本编写了此组件:
import { FC } from 'react'
import './Highlight.css'
interface HighlightProps {
filter: string
str: string
}
const Highlight: FC<HighlightProps> = ({filter, str}) =>{
if (!filter) return str
const regexp = new RegExp(filter, 'ig')
const matchValue = str.match(regexp)
if (matchValue) {
return str.split(regexp).map((s: string, index: number, array: string[]) => {
if (index < array.length - 1) {
const overlap = matchValue.shift()
return (
<span key={index}>
{s}<span className='highlight'>{overlap}</span>
</span>
)
}
return s
})
}
return str
}
export default Highlight
它采用 filter:String
和 str:String
props。一切正常都很好,但是如果我将所有内容都放在上面时,我会继续得到此错误:
Type '({ filter, str }: HighlightProps) => string | (string | Element)[]' is not assignable to type 'FC<HighlightProps>'.
Type 'string | (string | Element)[]' is not assignable to type 'ReactElement<any, any> | null'.
Type 'string' is not assignable to type 'ReactElement<any, any>'.ts(2322)
我的问题是 - 如何正确地为此组成部分及其道具进行典型典型?
ps 我尝试将 s
和 str
值放入返回语句中的值值&lt;&gt; {..} &gt;
,但这无济于事。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您必须确保在所有情况下都返回适当的JSX。
现在,React期望将单个包装
元素节点
返回您可以生孩子的内部。在第二个语句中,您将返回多个
&lt; span&gt;
元素,但没有父母。也只用片段包裹一点:You have to ensure you are returning proper JSX in all cases.
Now react expects to return a single wrapping
Element Node
inside which you can have your children.Inside the second
if
statement, you are returning multiple<span>
elements but without a parent. Just wrap the bit with Fragments too :Sandbox