Как получить пересечение ключей элементов типа кортежа?

#typescript

#typescript

Вопрос:

 type Tuple=[{a:string,x:string,z:string},{b:string,x:string,z:string}]
type IntersectionOfTupleElementKeys<T>=...
type MyType = IntersectionOfTupleElementKeys<Tuple> // = ('a'|'x'|'z')amp;('b'|'x'|'z')='x'|'z'
  

У меня есть тип кортежа с общими полями для каждого типа элемента (например, type Tuple ‘s x and z ). Как получить пересечение общих полей ( 'x'|'z' )?

Ответ №1:

Вы можете запрашивать ключи типа элемента кортежа:

 type IntersectionOfTupleElementKeys<T extends readonly any[]> = keyof T[number];

type MyType = IntersectionOfTupleElementKeys<Tuple> // 'x'|'z'
  

Игровая площадка


Мы получаем объединение всех типов элементов кортежа с помощью T[number] , а затем keyof применяем к типу объединения, что приводит к пересечению их ключей.

Комментарии:

1. Просто и приветствую!