Yamato DaiwaE(CMA)S(cript) extensions

RawObjectDataProcessor — Типовые сценарии

Объекты фиксированной структуры

Обязательность свойств

В случае ECMAScript, понятие обязательности (requirement) свойств расплывчато ввиду наличия двух пустых типовundefined и null, причём отсутствие какого-либо свойства или элемента в целом не равносильно его наличию со явно указанным undefined в качестве значения. Что значит «свойство обязательно»? Оно не должно иметь значения undefined или null? А может, ни того, не другого?

До версии 1.8 библиотеки YDEE, в спецификации свойств объектных данных required: true означал запрет на undefined, но не на] null — по умолчанию null был запрещён, а снять этот запрет можно было указав nullable: true. Может быть, такой программный интерфейс и лаконичный, но не слишком интуитивный, а это — множественные трещины в поддерживаемости кода.

Начиная с версии 1.8, разрешения/запреты на undefined и на null необходимо указывать явно и отдельно, но единообразным способом:

Разрешение/запретСлучай с undefinedСлучай с null
Полный запретisUndefinedForbidden: trueisNullForbidden: true
Условный запретundefinedForbiddenIf: ConditionAssociatedWithPropertynullForbiddenIf: ConditionAssociatedWithProperty
Подстановка значения по умолчаниюundefinedValueSubstitution: NonEmptyValuenullValueSubstitution: NonEmptyValue
Трансформация в другой пустой типmustTransformUndefinedToNull: truemustTransformNullToUndefined: true
Полное разрешениеisUndefinedForbidden: falseisNullForbidden: false

Также, если isUndefinedForbidden/isNullForbidden указано значение false (полное разрешение), то можно дополнительно через mustBeUndefinedIf/mustBeNullIf соответственно указать, когда значение должно быть пустым.

Полный запрет пустых значений

  • Укажите isUndefinedForbidden: true, чтобы запретить свойства со значениями undefined, будь то явный undefined или просто отсутствие свойства.
  • Укажите isNullForbidden: true чтобы запретить свойства со значением null.