Задать вопрос
@Persotr27

Как получить типы свойств объединенного типа в TypeScript?

Всем привет!

Лучше показать проблему на примере, по этому вот... У меня есть такой объединенный тип
type Creature = {
    type: "people";
    subtype: "adult";
    params: IPeopleAdultParams;
} | {
    type: "animal";
    subtype: "cat";
    params: IAnimalCatParams;
}


Есть массив:
const creatures = Creature[];

Вместо того, чтобы прописывать постоянно что-то на подобии
creatures.push({
type: 'animal', 
subtype: 'cat',
params: {
...
}});

я хочу использовать функцию push(type, subtype, params), которая и будет выполнять код выше, с переданными ей аргументами.
Например, push('people', 'adult', {...});
Примерный вид функции:
function push(type: ?, subtype: ??, params: ???) {
    creatures.push({type, subtype, params})
}


Тип subtype отличается, в зависимости от типа type (ну, это видно по определению типа Creature), также само, тип params зависит от типов type & subtype.

Как задать типы аргументов для функции push?
Заранее спасибо за помощь! :)
  • Вопрос задан
  • 89 просмотров
Подписаться 1 Средний 1 комментарий
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
Kozack
@Kozack
Thinking about a11y
type Creature = {
    type: "people";
    subtype: "adult";
    params: IPeopleAdultParams;
} | {
    type: "animal";
    subtype: "cat";
    params: IAnimalCatParams;
}

type allTypes = Creature['type']


Playground
Ответ написан
bingo347
@bingo347 Куратор тега TypeScript
Crazy on performance...
Когда я отвечал Вам тут в примере был тип CreatureBasis из которого уже строился тип Creature через вычисления на типах.
Его же можно использовать и для построения Вашей функции:
https://www.typescriptlang.org/play?#code/C4TwDgpg...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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