Make InputFieldJSONSchema.properties work with specialized types #1894
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.
InputFieldJSONSchema
is a base type that can be specialized. E.g.InputField
specializes it.However, in the base type,
properties
is defined in terms of a specialized type.This makes it hard to correctly type
properties
. For example, specializingInputField
with, say,EditableInputField
means thatproperties
would be defined in terms ofInputField
, notEditableInputField
.Instead, we can use TypeScript's polymorphic this type to define
properties
.Testing
Let's define some sample input field arrays to demonstrate:
Compare how TS sees these two arrays of input fields.
Old code
TS only understands that
properties
is a map ofInputField
, which makes sense because it's hard coded.For
xs
:And
ys
:New code
TS uses the specialized type for the
properties
map.For
xs
:For
ys
:Add a new specialized type
EditableInputField
:And a test array for this:
And we can see that TS also correctly understands that
properties
is now this specialized type: