Создание нового типа общих свойств нескольких типов

#typescript #typescript2.0

#typescript #typescript2.0

Вопрос:

Возможно ли создать новый тип из общих свойств разных типов?

Пример:

 type A = {
  id: number;
  text: string;
  description: string; 
}
   
type B = {
  text: string;
  description: string;
  value: number;
}
  

и мой целевой тип будет выглядеть так

 type C = {
  text: string;
  description: string;
}
  

Есть ли способ добиться этого без создания типа вручную?

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

1. Каков ожидаемый результат для таких типов, как {x: number} и {x: string} ?

2. Хороший вопрос, вероятно, этот последний тип выигрывает

Ответ №1:

Предполагая, что тип результирующего значения для одних и тех же ключей с разными типами значений должен быть их объединением:

 type Common<T1, T2> = Pick<T1 | T2, Extract<keyof T1, keyof T2>>
  

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


Мы извлекаем общие ключи, затем выбираем их из объединения двух типов.