@AlexWeb6667
Web-дизайнер с опытом FullStack разработки

Как правильно описать пропс, который может быть и объектом, и массивом с объектами одинакового типа?

Всем доброго времени суток, столкнулся с неудобной ситуацией в ts.
У меня Пропс может быть как объектом там и массивом объектов

export interface ControlProps {
    value?: string | number
}

export interface ControlsProps {
    [propName: string]: ControlProps | ControlProps[]
}

export interface FormProps {
    controls: ControlsProps | ControlsProps[]
}


Частично этот вариант работает, но много где начинает ругаться например что у ControlsProps нет метода foreach(когда я работаю с объектом controls) и тд.

Не подскажете как вообще правильные ситуации обрабатывать, может подход с ControlsProps | ControlsProps[] в корне неправильный, если это так, направьте в нужном направлении. Заранее спасибо
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
yarkov
@yarkov
Помог ответ? Отметь решением.
например что у ControlsProps нет метода foreach(когда я работаю с объектом controls)

Ну так проверки нужны, типа
if (Array.isArray(prop)) {
  // тут метод forEach вызывать можно, ибо массив
}


может подход с ControlsProps | ControlsProps[] в корне неправильный

Ну в корне или нет - решать вам, но я бы предпочёл всегда передавать массив, пусть и из одного элемента.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347 Куратор тега TypeScript
Crazy on performance...
много где начинает ругаться например что у ControlsProps нет метода foreach
все правильно ругается, по Вашим типам ControlsProps - это plain object, где ключом может быть любая строка, а все значения - ControlProps или массив ControlProps. У произвольного объекта нет метода forEach.

Не подскажете как вообще правильные ситуации обрабатывать, может подход с ControlsProps | ControlsProps[] в корне неправильный
https://www.typescriptlang.org/docs/handbook/2/nar...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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