@igoryusha22

Можно, и как если да, написать динамический интерфейс для React пропсов на наличие одного ключа?

Есть 2 разных интерфейса.

interface Name {
  name: string;
}

interface LastName {
  lastName: number;
}


И свойство family.

Если оно не предоставлено.

То компонент должен ожидать набор пропсов из Name.
<Component 
  name="Ivan" 
  lastName=""  // error lastName is not presented on type Name
/>


Если предоставлено, то компонент должен ожидать набор пропсов из LastName.
<Component 
  name="Ivan"  // error name is not presented on type LastName
  lastName="Fenia" 
  family={['Ivan', 'Anya']}
/>
  • Вопрос задан
  • 184 просмотра
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
interface Name {
    name: string;
}

interface LastName {
    lastName: string;
    family: string[];
}

function Component(props: Name): React.ReactElement;
function Component(props: LastName): React.ReactElement;
function Component(props: Name | LastName): React.ReactElement {
    if ('family' in props) {
        return <b>{props.lastName}</b>
    } else {
        return <b>{props.name}</b>
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
GreyCrew
@GreyCrew
Full-stack developer
В чем проблема их объединить?
interface Name {
  name?: string;
  lastName?: number;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы