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 с.):
Крім наведенного рівняння в відео можна побачити і наступні
Пропоную в цій статті розглянути ці рівняння більш детально і розібратися чому вони працюють саме так.
T | never ⇔ T
Знак ⇔
означає, що типи зліва і справа від нього еквівалентні, теж саме, що знак ===
в JavaScript/TypeScript.
Знак |
означає об’єднання (union) типів.
І наришті, посилаючись на документацію TypeScript never
представляє тип, який ніколи (never) не виникає.