Использование as SomeType (Type Assertion) отключает проверку типов и приводит к багам в рантайме. Пиши кастомные предикаты типов
interface User { id: number; name: str; }
interface Guest { isGuest: true; }
type Account = User | Guest;
# ❌ Опасно (компилятор поверит на слово, а в рантайме может быть undefined):
function getNameUnsafe(account: Account) {
return (account as User).name;
}
# ✅ Безопасно через Type Guard (возвращаемый тип `account is User`):
function isUser(account: Account): account is User {
return 'name' in account;
}
function getNameSafe(account: Account) {
if (isUser(account)) {
return account.name; // TS автодополнением видит, что это User
}
return "Гость";
}