Комментарии 9
Ключевое слово
as— это жесткое приведение типов. Вы заставляете TypeScript поверить вам на слово. Если вы ошибетесь, компилятор не станет с вами спорить и пропустит ошибку.
Ну как бы нет) Ошибку он не пропустит, просто она не так красиво будет подсвечена

Спасибо за внимательность! Абсолютно верное замечание. Исправление в статью внесено. Корректный пример должен выглядеть вот так (с иcпользованием as ошибка пропускается, а при satisfies нет):

С ошибкой вы верно подметили, но зачастую пишут 'as unknown as Type'
Все равно satisfies возвращает более узкий тип и в этом его преимущество
Признайтесь, мы все хотя бы раз лепили
anyпросто чтобы компилятор отстал
Я не писал ни разу, у меня линтер не пропускает такое по умолчанию. Но ts не учил, типы пишет ИИ.
удалено
Пример для параграфа о собственных тайпгардах не очень удачный - там discriminated union и всё работает "из коробки":
if (result.status === 'success') {
// Здесь TS точно знает, что это PaymentSuccess
console.log(`Успешно! ID: ${result.transactionId}`);
} else {
// А здесь TS понимает, что остался только PaymentFailed
console.error(`Ошибка: ${result.errorMessage}`);
}причем даже для filter: results.filter(r => r.status === 'success') - массив PaymentSuccess, тут ts сам увидел тайпгард
Про enum не согласен. Семантически это реально должен быть enum, а не union строк. То что он в итоговом коде неоч. выглядит можно пережить. Во всяком случае уход от enum код не улучшает никак.
А разве const enum не уберет в рантайме ненужные элементы?

Перестаем бороться с компилятором TypeScript и начинаем писать безопасный и строго типизированный код