«Discriminated union — несколько object shapes с общим литеральным тегом — status, kind, type — по которому компилятор сужает union. Беру для состояний с чёткими вариантами, например результат fetch: невозможные комбинации не типизируются — data только на success, error только на error, нельзя случайно иметь оба. Это заменяет «мешок boolean и optional», где loading, data и error одновременно optional и UI вечно защищается от бессмыслицы. Сильнее всего опираюсь на exhaustiveness: в default присваиваю в never — добавили state и забыли case, сборка падает. Единственное требование: discriminant — literal type; расширенный string не сужает.»
Сформулируйте tagged union, anti-pattern с optional flags и exhaustiveness через never.