Допустим, у нас есть два интерфейса First и Second:
interface First {
a: string;
b: number;
}
interface Second {
b: number;
c: Date;
}
С помощью пересечений можно объединить два интерфейса:
type FirstSecond = First & Second // {a: string, b: number, c: Date}
Но можно ли сделать внутреннее соединение, чтобы результирующий интерфейс Только состоял из свойств, объявленных в интерфейсах оба:
type FirstSecond = First /*inner join here*/ Second // {b: number}
Это может быть особенно полезно для универсальных типов.
@jonrsharpe не знаю, что ты говоришь мне делать? Если бы это было так просто для меня, я бы не задавал здесь вопрос. Если вы имеете в виду, что я должен объявить третий интерфейс, такой как { b: number }, то это не отвечает на мой вопрос, потому что я хотел иметь общее решение (см. Последнее предложение).
Да, это именно то, что я имею в виду, извлечь третий интерфейс с общими чертами.






Вы можете использовать Pick, чтобы взять общие свойства из пересечения. Чтобы получить общие свойства, вы можете использовать условный тип Extract для фильтрации ключей одного типа по ключам другого:
interface First {
a: string;
b: number;
}
interface Second {
b: number;
c: Date;
}
type IntersectByProperties<T, U> = Pick<T & U, Extract<keyof T, keyof U>>
type R = IntersectByProperties<First, Second>
Почему бы вам не извлечь общий интерфейс?