Обновить

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

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели6.9K
Всего голосов 8: ↑8 и ↓0+9
Комментарии9

Комментарии 9

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

Ну как бы нет) Ошибку он не пропустит, просто она не так красиво будет подсвечена

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

Не LLM же, да?

С ошибкой вы верно подметили, но зачастую пишут '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 не уберет в рантайме ненужные элементы?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации