Есть ли в языке поддержка чего-то подобного?
// 1 компонент
interface AnimalProps {
name: string;
}
const Animal: FC<AnimalProps> = (props) => {
return <span>{props.name}</span>;
};
// 2 компонент
interface PersonProps {
age: number;
}
const Person: FC<PersonProps> = (props) => {
return <span>{props.age}</span>;
};
// затем какой-то другой компонент, который должен возвращать
// какой-то другой компонент в зависимости от переданного типа,
// и в зависимости от типа, который будет передан
// определялись бы дополнительные наборы
interface ComponentProps {
type: 'animal' | 'person';
// smth that depends on type
// ...
...({
'animal': AnimalProps,
'person': PersonProps,
}[this.type]),
}
const Component: FC<ComponentProps> = (props) => {
switch (props.type) {
case 'animal':
return <Animal name={props.name} />;
case 'person':
return <Person age={props.age} />;
}
};
const Usage: FC<ComponentProps> = (props) => {
// write type then get support
return <Component type="animal" />;
};