Разработчикам JavaScript и TypeScript часто приходится неоднократно писать одни и те же условия. Если вы веб-разработчик, вы, вероятно, сталкивались с таким кодом:
const handleSaveTextKeydown = (event: KeyboardEvent) => { if (event.key === 'Enter') { //... save text } }
В этом случае event.key имеет строковый тип, и легко вызвать ошибки, например, случайно включив пробел в Enter.
Почему бы не инкапсулировать это условие в функцию?
const handleSaveTextKeydown = (event: KeyboardEvent) => { if (checkIsEnterKey(event.key)) { //... save text } }
Это гарантирует, что все проверки клавиши Enter будут согласованными и надежными.
Теперь рассмотрим следующую проверку:
type Value = null | object; const value = {} as Value; if (typeof value === 'object') { value; // value type is null | object }
Несмотря на то, что TypeScript умный, значение внутри условия остается типа Value. Это связано с тем, что typeof null возвращает «объект».
Итак, вам нужно написать:
if (value !== null && typeof value === 'object') { value; // value type is object }
Многие разработчики могут не инкапсулировать это в функцию и вместо этого писать ее повторно всякий раз, когда сталкиваются с такой ситуацией.
Сколько раз в жизни вы писали одно и то же условие?
Сколько раз вы совершали одну и ту же ошибку?
Сколько еще раз вы напишете одно и то же условие в будущем?
Если бы это был я, я бы сделал это:
if (checkIsObject(value)) { value; // value type is object }
Инкапсуляция общих условий в функции дает множество преимуществ.
Рассмотрим следующий пример:
const array = [0, 1, 2, 3, 4, 5, null, undefined];
Давайте создадим массив, исключающий только нулевые значения.
Вы можете отдать приоритет краткости и написать это так:
const numbers = array.filter(Boolean);
К сожалению, это не идеально. 0 также оценивается как ложное и исключается. Итак, вам нужно написать:
const numbers = array.filter(item => item !== null && item !== undefined);
Разве это не уродливый код, который нельзя использовать повторно?
Я могу написать более элегантный код:
const numbers = array.filter(checkIsNullish);
Перестаньте постоянно писать общие условия. Это приводит только к ошибкам, и код становится менее читабельным.
Позвольте мне представить созданную мною библиотеку под названием checker.
Эта библиотека служебных функций представляет часто используемые условия в общей веб-разработке и низкоуровневой разработке в виде функций. Все функции принимают входные данные и возвращают логическое значение.
На момент написания этой статьи он предоставлял множество функций для обработки таких типов данных, как строки, числа, логические значения и нулевые значения. Все функции протестированы, документированы и просты в использовании.
Давайте рассмотрим несколько реальных примеров.
Все пакеты, предоставляемые этой библиотекой, опубликованы на JSR. Их можно легко установить в проекты NPM, PNPM, Yarn, Bun и Deno.
Здесь мы возьмем пакет @checker/string в качестве примера с NPM.
Выполните следующую команду в каталоге вашего проекта:
npx jsr add @checker/string
import { checkIsNotEmptyString, checkIsIndexFound } from "@checker/string"; const value = "Hello"; const formatted = value.trim(); if (checkIsNotEmptyString(formatted)) { // formatted !== '' // When formatted is not an empty string } const index = value.indexOf("el"); if (checkIsIndexFound(index)) { // index !== -1 // When "el" is found in value }
Мне не нравится использовать операторы логического отрицания, такие как !SOME_CONDITION, для изменения логического значения. Это связано с тем, что это неявно, и простое изменение логического значения путем его добавления или исключения может привести ко многим опасным ситуациям.
Поэтому для всех функций определены соответствующие функции checkIsNot~.
Инкапсулируйте общие условия в функции. Таким образом, код становится более читабельным, а ошибки легче обнаружить.
Спасибо, что читаете.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3