Как разрешить неопределенное поле, запретив принуждение типа с помощью Yup? - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь проверить поле объекта с помощью yup.

Вот мои требования:

  1. Поле должно быть либо строкой, либо неопределенным.
  2. Если он не определен, ему должно быть присвоено значение по умолчанию.
  3. Если это значение какого-то другого типа, его не следует преобразовывать в строку. Вместо этого он должен быть несовместимым и привести к ошибке.

Пока что я пробовал следующее:

A. Следующая схема не предотвращает принуждение типов. например, когда значение является числом, оно проходит проверку. Однако я хочу, чтобы он не прошел проверку.

const schema = yup.object().shape({
  myField: yup.string().default('myDefaultString')
});

B. Следующая схема предотвращает приведение типов, но это не удается, когда я передаю неопределенное значение. На самом деле я хочу, чтобы значение было myDefaultString, если задано неопределенное значение.

const schema = yup.object().shape({
  myField: yup.string().strict(true).default('myDefaultString')
});

C. Следующая схема имеет тот же результат, что и вариант B.

const schema = yup.object().shape({
  myField: yup.string().strict(true).notRequired().default('myDefaultString')
});

D. Используйте strict: true как часть параметров при использовании метода validateSync для проверки схемы. Опять же, результат тот же, что и у B.

Буду признателен за любую помощь с этим, спасибо!

1 Ответ

0 голосов
/ 19 июня 2020

Я решил, что вы можете расширить строку yup следующим образом:

class StrictString extends yup.string {
  constructor() {
    super();
    transforms = []; // remove the default type coercion transforms
  }
}

А затем замените StrictString() на yup.string(). Это будет соответствовать требованиям.

...