Next.js, общий тип Id и union-состояния
Одна из типовых проблем в Next.js с TypeScript - данные вроде типизированы, но архитектура от этого надёжнее не становится. Причина в том, что типы ставятся локально, а не на границах системы.
На практике полезные места другие. Общий тип Id для сущности, чтобы не протаскивать сырой string дальше нужной точки. Union-результат для операций и форм, чтобы UI работал только с допустимыми состояниями. Narrowing через if, чтобы ветка success и ветка error не смешивались в один рыхлый объект.
Это вроде бы небольшие приёмы, но именно они превращают TypeScript из набора аннотаций в систему контрактов. Важно в App Router, где постоянно есть границы между server и client, внешний ввод из URL и несколько уровней состояния.
Разобрал это подробнее в статье на Хабр
Живой пример: Workbench
Stepik: Next.js II: TypeScript 2026