This is a neat trick especially if your brain got rewired to think about union and disjoint types. I recently had to do something like this to force separatuon of required arams that go into a media control wrapper:
type ControlParams = { type: 'audio' } & ControlParamsAudio | { type: 'video } & ControlParamsVideo
const ControlsWRapper : React.FC<ControlParams> = <>....</>
Boom, you have proper autocomplete and typechecks for audio controls or for video controls depending on your type.