Повернутися до блогу
02 лист. 2024 р.
2 хвилин читання

Typescript higher-order type equivalences

Highlighting key differences and best use cases

Typescript higher-order type equivalences

Інтро

Деякий час назад я натрапив на цікаву статтю під назвою A keyof puzzle від Dan Vanderkam - автора чудової книги EffectiveTypescript.

В статті розглядаються наступні рівняння

keyof (A&B) = (keyof A) | (keyof B)
keyof (A|B) = (keyof A) & (keyof B)

які Dan побачив у доповіді Андерса Хейлсберга на TSConf 2018 (“Higher order type equivalences” на 26 хв. 15 с.):

Крім наведенного рівняння в відео можна побачити і наступні Test Relative Image

Пропоную в цій статті розглянути ці рівняння більш детально і розібратися чому вони працюють саме так.

T | never ⇔ T

Знак означає, що типи зліва і справа від нього еквівалентні, теж саме, що знак === в JavaScript/TypeScript.

Знак | означає об’єднання (union) типів.

І наришті, посилаючись на документацію TypeScript never представляє тип, який ніколи (never) не виникає.