Ну вообще есть библиотеки типа yup. сущности можно описывать используя эти библиотеки. На основе описания на yup, можно автоматом генерировать типы ТС.
Таким образом там где нужна рантаймовая валидация (а это вовсе не обязательно валидация форм, но и например проверка данных полученных от АПИ) мы используем yup schema, а типы автоматически сгенерированные на ее основе помогут в статической типизации.
Если полностью исключить any, object и т.д, то мы получим всю мощь тайпскрипта и рантаймовых проверок, без увеличения кол-ва кода и необходимости отдельного описания типов для статики и рантайма.