feat(TypeScript): support form binding with optional fields and objects #8847
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
BREAKING CHANGE: TypeScript the
value
property ofBinderNode
now has optionallyundefined
type for non-initialised optional fields.In terms of forms, an object field could be used in both ways: as an individual field or a grouping for the object’s nested fields.
Previously, the optional fields in empty form value objects were initialised by the client-side binder with a generated value when a
BinderNode
(or a form binding) is created for such fields. Such a behavior works well with grouping object fields, but makes it problematic to bind an individual optional field of object type by making empty value already defined.With this change, the client-side form binder skips initialising optional fields, keeping their values
undefined
, unless there is a binding for a nested field inside an optional parent object.For example: with a binding for
model.optionalObject
will have a corresponding empty form value of{"optionalObject": undefined}
, however, with a binding ofmodel.optionalObject.nestedString
, the empty form value will contain a generated object:{"optioanlObject": {"nestedString": ""}}
.