【发布时间】:2021-12-25 13:46:17
【问题描述】:
我有一个Modal 函数组件,它应该有三个子函数组件Header、Body 和Footer,我想将Modal 限制为只允许Header | Body | Footer 类型的元素,因为它是顶级子元素。
<Modal>
<Modal.Header></Modal.Header>
<Modal.Body></Modal.Body>
<Modal.Footer></Modal.Footer>
</Modal>
我已经创建了函数组件,但我不知道如何约束它们:
import React, { ReactElement, ReactNode } from 'react'
function Header(props: { children: ReactElement }) {
const { children } = props
return <>{children}</>
}
function Body(props: { children: ReactElement }) {
const { children } = props
return <>{children}</>
}
function Footer(props: { children: ReactElement }) {
const { children } = props
return <>{children}</>
}
function Modal(props: { children }) {
const { children } = props
return <>{children}</>
}
Modal.Header = Header
Modal.Body = Body
Modal.Footer = Footer
export default Modal
我试图为这样的函数创建一个返回类型(例如Header),但它并没有阻止通过例如<div/> 而不是 Header 元素:
type Header = ReactElement
function Header(props: { children: ReactElement }): Header => {...}
function Modal(props: { children: Header }): ReactElement => {...}
我创建了一个 TypeScript Playground here。
【问题讨论】:
标签: reactjs typescript