Отличное преимущество Typearcript в том, что вы можете применить безопасность типа в свой код. Не требуя, чтобы добавить безопасность типа в код, который вы пишете, поможет массово, когда дело доходит до изменения его позже.
Один из менее известных аспектов Tymdercript, что из-за динамической и гибкой природы JavaScript система типа TypectScript была разработана таким образом, чтобы они могли добавить функции, которые не часто находятся на других языках.
Тип специальной ноты – Никогда
тип. Как описано в SkiteStry Справочник :
Никогда не введите представляет тип значений, которые никогда не возникают. Например, никогда не является типом возврата для экспрессии функции или экспрессии функции стрелки, которое всегда бросает исключение или один, который никогда не возвращается; Переменные также приобретают тип никогда не суженного любыми охранниками типа, которые никогда не могут быть правдой.
Иногда код, с которого вы работаете, содержит выключатели, которые содержат несколько случаев. Время от времени необходимо добавить новые случаи, и легко забыть добавить их.
При необходимости обновления операторов переключателей часто можно указать код, который не настолько велик, Tymdercript содержит языковой конструкцию, чтобы иметь возможность записать исчерпывающий оператор выключателя, хотя использование Никогда
тип.
Теперь давайте посмотрим, как мы можем применить эти знания. Позвольте сказать, что у нас был этот код, который должен обрабатывать все случаи enum Миенум
Отказ
enum MyEnum { Case1 = "Case1", Case2 = "Case2", Case3 = "Case3" } const input: MyEnum =MyEnum.Case1; switch(input) { case MyEnum.Case1: console.log('process case 1!'); break; case MyEnum.Case2: console.log('process case 2!'); break; }
Ooops! Похоже, мы забыли обрабатывать Case3. Мы, безусловно, можем исправить это, добавив пропущенный случай к этому оператору коммутатора, однако не было бы хорошо, если бы у нас был способ узнать во время компиляции, что мы пропустили дело? Оказывается, мы можем с помощью Teadercript, используя следующее:
enum MyEnum { Case1 = "Case1", Case2 = "Case2", Case3 = "Case3" } const input: MyEnum =MyEnum.Case1; function assertUnreachable(x: never): never { throw new Error("Didn't expect to get here"); } switch(input) { case MyEnum.Case1: console.log('process case 1!'); break; case MyEnum.Case2: console.log('process case 2!'); break; default: assertUnreachable(input); }
Теперь это не сможет компилировать, потому что мы не справились со всеми Миенум
значения:
index.ts:21:23 - error TS2345: Argument of type 'MyEnum.Case3' is not assignable to parameter of type 'never'.
Это потому, что вход
на самом деле может быть Myenum. Case3.
так не может быть назначен на Никогда
тип. Таким образом, мы успешно использовали Tymdercript для обнаружения того, что мы пропустили случай.
Чтобы исправить код сейчас, все, что нам нужно сделать, это добавить следующее в оператор Switch для обработки Myenum. Case3
и это будет скомпилировать.
case MyEnum.Case3: console.log('process case 3!'); break;
ПРИМЕЧАНИЕ. Все хорошо и хорошо здесь, однако, что происходит, если вход на самом деле происходит от внешнего источника (например, полезная нагрузка JSON от API), и просто предполагается, что он имеет тип enum?
В этом случае мы можем увидеть проблему, которая может возникнуть. Чтобы проиллюстрировать это, давайте определим вход
так как:
const input: MyEnum ="Foo"; // some value from an external source
Тогда хотя бы оно скомпилировалось, мы получили бы ошибку, выпущенную при запуске:
Error: Didn't expect to get here
Для того, чтобы справиться с этим, мы должны быть осторожны о значениях, которые приходят из внешнего источника. Один из способов – добавить проверку на внешний вход. Например JSON SCHEMA Может использоваться для проверки внешнего ввода до того, как он достигнет этой части кода.
В любом случае, мы должны быть осторожны, чтобы справиться с этими сценариями, и реализовать, что если не обрабатывается должным образом, ошибка времени выполнения выше может произойти. Итак, обязательно проверьте свою полезную нагрузку или хотя бы справиться с возможностью ошибки времени выполнения.
Это все сейчас. В этой статье вознаграждение здесь, что при использовании операторов переключателей TymerctScript дает вам способ исчерпывать, что все случаи обрабатываются в операторе выключателя, которое использует Enums. Удобная особенность, которая недоступна на большинстве других языков, давая еще одну прочную причину, чтобы использовать TeampScript, что и ваш тип безопасного типа для спереди, так и для заднего конца.
Оригинал: “https://dev.to/ddiprose/exhaustive-switch-statement-with-typescript-26dh”