Pull to refresh

Comments 7

Оператор Check делает из проверки на истинность (значение => true/false) валидатор. А Compose объединяет валидаторы в цепочку. При выполнении цепочка прерывается после первой ошибки.

При проверке лучше возвращать массив с ошибками, что бы вызывающий код мог проанализировать ошибки (коды ошибок? ) и решить надо бросать исключение или нет. И кроме того, удобно когда пользователь может узнать о всех ошибках сразу, а не так что исправил одну, а там следующая «появляется».

Спасибо за доклад по библиотеке.
Все так и есть, но не для Compose, а для Keys и Each — там естественно возвращаются ошибки по всем полям/индексам. Но Compose — это последовательная цепочка валидаторов. Например
Compose([isString, Check(str => str.startsWith('a'))])

Вторая проверка зависит от первой, поэтому имеет смысл прерываться именно после первой. Compose можно рассматривать как and (&&), а Some как or (||).
про Some в статье не слова :)
Вообще круто конечно.
У меня после прочтения остались вопросы:
1. Вся валидация работает только на клиенте?
2. Не понял, есть ли возможность задавать правила валидации только для одного параметра, или, например, для двух и более? Например, если у проверяемого объекта есть длина и ширина, то можно ли поставить правило валидации, что ширина должна быть не менее, чем в два раза меньше длины? И в догонку к этому вопросу, если неизвестно, какой именно из параметров нарушает условие, то их надо, вроде как оба отметить, что они не валидны.
1. Работает везде, где есть javascript.
2. В том то и дело, что стратегия обработки таких ошибок может быть разная. В случае с травой валидаторы все независимые, но есть варианты как можно передать параметры.
1) использовать контекст (последний параметр) — он будет передан во все валидаторы, т.е. можно извлечь любые данные.
2) можно вначале проверить данные отдельно друг от друга, а затем проверить объект целиком. например:
const pointV = Trava([
  {
      width: isNumber,
      height: isNumber,
  },
   Check((size, ...args) => size.width < size.height),  // здесь ошибка вылетит на весь объект, последний элемент в args - контекст
   // или например кастомная ошибка на одно из полей (при желании может быть что угодно):
   Check(size => size.width < size.height, { height: 'должно быть больше width' }),
]);
const point = { width: 1, height: 2 };
pointV(point, { point });  // передали значение и контекст если нужно

Я больше за 2 вариант наверно. В траве ошибки — любые js примитивы, а валидаторы — обычные функции, поэтому довольно просто сделать любую обработку.
да пожалуйста конечно
Sign up to leave a comment.

Articles