试图把逻辑和设计分开。
下面是我试图解决的问题的简化版本。
import React, { ReactNode } from "react"
interface ChildProps {
id: string
}
const Child = function (props: ChildProps) {
return <div id={props.id} />
}
interface ParentProps {
id: string
node: ReactNode
}
const Parent = function (props: ParentProps) {
return <props.node id={props.id} /> // Throws "JSX element type 'props.node' does not have any construct or call signatures.ts(2604)" error
}
1条答案
按热度按时间zwghvu4y1#
ReactNode
是用于呈现JSX的类型,因此您希望将prop作为功能组件键入,它应该会像您预期的那样工作:Playground
将JSX组件呈现为一个标题大写的JSX标记也是一个很好的最佳实践。这在更复杂的组件中更容易阅读。
如果你想接受的组件有
id
属性,你可以在node
的props类型中指定它。现在,您可以像指定任何其他 prop 一样指定该 prop :
Playground
最后,您可以疯狂地使用泛型,推断
node
的prop类型,并使 Package 器组件接受节点接受的所有prop,无论它们是什么。Playground
这在学术上很有趣,但与在renderedJSX中传递渲染没有太大区别。