Есть библиотеки для этих нужд. Но можно и руками проверки написать — в документации тайпскрипта в разделе advanced написано как.
Я у себя использую для этого библиотеку yup. Описываю схемы данных, прогоняю сырые данные через scheme.validate и, если валидация прошла успешно, то нетипизированный ответ от бака превращается в структуру, соответствующую типу схемы. Ну и сами типы я руками не описываю, вывожу из схемы через type Foo = InferType