Async функция возвращает Promise. await разворачивает Promise: const user: User = await getUser(). Ошибки: try/catch — err имеет тип unknown (strict mode). Нужно: if (err instanceof Error) { err.message }. Паттерн Result type: type Result = { ok: true; data: T } | { ok: false; error: E }. Функция возвращает Result вместо throw. Это делает ошибки явными в типах. neverthrow — библиотека реализующая этот паттерн.