Обновить

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

Э... А не проще в примере с Card/BankTransfer просто убрать default? Раз уж у нас есть строгая типизация – было б неплохо ей пользоваться.
Или это подстраховка на случай кривых значений, пришедших из JavaScript? Но ведь они могут быть и ещё более кривыми.

Тут же используются switch statement, а не switch expression (последнего и в языке-то нет). А switch statement никак не проверяет полноту вариантов.

Иными словами, вот такой код совершенно корректен:

function fn(x: 'foo' | 'bar' | 'baz') {
  switch (x) {
      case 'bar': return;
      case 'baz': return;
  }
}

Ну и как тут без default отследить, что одного варианта не хватает?

А, тогда понятно. Хотя вроде в примере из статьи, когда возвращается не undefined –автоматом отследится.
А так – если вы готовы везде писать exhaustive switch, то удобнее https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/docs/rules/switch-exhaustiveness-check.md – всё лучше, чем явные заглушки в default.

Чем лучше-то?

Заглушка локальна, и явно отличает exhaustive switch от обычного.

А правило глобально, и применяется сразу ко всем switch...

Не легче – ведь тут же речь о том, чтобы разработчику не приходилось держать в голове/искать все использования Union'а при его изменении, а переложить эту ответственность на TS – и именно благодаря default case с exhaustive check TS сам подсветит все места, нуждающиеся во внимании/в поддержке.

По идее в проекте у разработчика под полным контролем TS всё, за исключением двух источников неопределённых данных – пользовательский ввод и данные с бэка (хотя на них можно накинуть валидаторы схем – как раз для подстраховки).

А можно, не надо, подход с onMsg рекомендовать. Это примерно антипатерн «Божественный метод». Давайте нормальные абстракции для компонентов продумывать а не костыли, маскирующие проблему, городить. Всем добра.

Вот тоже согласен, что в итоге пришли к одному методу, который должен будет реагировать на десяток различных событий, и при этом держать всю логику на каждое событие внутри case'а. А там и области видимости отдельной нет, и длинные портянки кода через некоторое время начнут путать и раздражать.

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

Информация

Сайт
cloud.ru
Дата регистрации
Дата основания
2019
Численность
1 001–5 000 человек
Местоположение
Россия
Представитель
Контент-редактор Cloud.ru