Как в TypeScript, добавлять свойство по условию?

Нужно добавить интерфейсу:
export interface ModalProps extends CuiModalProps {
    children: ReactElement | ReactElement[]
    setterClosePopup: Dispatch<SetStateAction<boolean>>
    namePopup?: string
    isOpen?: boolean
    withBorder?: boolean
    view?: 'labeled'
    className?: string
}


свойство label со значение string при условии, если свойство view имеет значение 'labeled', иначе label должен получить значение never
  • Вопрос задан
  • 292 просмотра
Решения вопроса 1
Aetae
@Aetae Куратор тега TypeScript
Тлен
Нужно больше чёткости. Какой ещё бывает view кроме labled?
Через интерфейсы это сделать нельзя - можно через union типов, но обязательно должно быть поле-дискриминатор, различное для каждого случая.

Если такого поля нет - конкретный тип сделать нельзя, однако судя по приставке Props, можно предположить, что это какие-то props какого-то React компонента, тогда этого можно добиться с помощью перегрузки:
export interface ModalProps extends CuiModalProps {
    children: ReactElement | ReactElement[]
    setterClosePopup: Dispatch<SetStateAction<boolean>>
    namePopup?: string
    isOpen?: boolean
    withBorder?: boolean
    className?: string
}
export interface ModalPropsLabled extends ModalProps {
    view: 'labeled'
    label: string
}

export const Component: ((pros: ModalProps) => ReactNode) & ((pros: ModalPropsLabled) => ReactNode) = (pros: ModalProps | ModalPropsLabled) => { ... }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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