@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?
Заранее спасибо за помощь! :)
  • Вопрос задан
  • 82 просмотра
Пригласить эксперта
Ответы на вопрос 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...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы