Функции
У любой функции с типизированными параметрами или возвращаемым типом происходит то же, что и на границе, — без единой написанной вами проверки:
function processUser(user: User): UserResult {
return computeSomething(user)
}
на сборке становится:
function processUser(user): UserResult {
user = check(user, /* схема User */)
return check(computeSomething(user), /* схема UserResult */)
}
Кривой payload падает в точке вызова — до того, как computeSomething успел
сработать. Кривая реализация, возвращающая не то, падает до того, как значение
уйдёт из функции.
В прод-сборке каждая такая проверка — это компилируемый валидатор, а не интерпретируемая схема, так что гарантия практически бесплатна.