2024.05.24
TypeScriptで「AがtrueだったらBを必須にする」を実現する
例えば以下のような感じのとき、isModalがtrueのときhandleModalCloseが必須にならないと型として弱い。
type Props = {
data: Data
isModal?: boolean
handleModalClose?: () => void
}
export const Component = ({ data, isModal, handleModalClose }: Props) => {
return (
<>
{isModal ? (
<Modal onClose={handleModalClose}><Form data={data} /></Modal>
) : (
<Form data={data} />
)}
</>
)
}
なので、こうする。
type BaseProps = {
data: Data
}
type ModalProps = {
isModal: true
handleModalClose: () => void
}
type NonModalProps = {
isModal?: false
}
type Props = BaseProps & (ModalProps | NonModalProps)
export const Component = ({ data, ...props }: Props) => {
return (
<>
{props.isModal ? (
<Modal onClose={props.handleModalClose}><Form data={data} /></Modal>
) : (
<Form data={data} />
)}
</>
)
}
補完も効くしエラーもでたよ✌🏻
最後まで読んでいただきありがとうございます!
もしよければ「読んだよ!」の代わりに↑の紙飛行機をクリックで飛ばしてください。わたしの元に届きます。
Special Thanks!!!
ありがとうございました