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.
Reasons for making this change
The way
IdSchema
andPathSchema
are defined results in reaching a conflicting type when the type argument passed to those types is of a primitive type, such asstring
.For example, in the snippet below (TS playground link), when the type argument for
IdSchema
isstring
(i.e.IdSchema<string>
), the effective resolved type would be an intersection ofFieldId
andstring
, which is impossible:When the type argument is
string
,keyof string
in TypeScript actually results inkeyof String
, which includes index signatures likelength
,toString
, etc. However, becauseIdSchema
andPathSchema
map over the keys of the string primitive type, we need to consider thatstring
itself is not treated as an object with properties that can be indexed. Thus,IdSchema
andPathSchema
will effectively ignore any keys and result instring
.This PR addresses this contradiction by limiting the resolved type of
IdSchema
andPathSchema
to justFieldId
andFieldPath
, respectively, when the type argument is a non-primitive type, in which it leverages the existing typeGenericObjectType
. This would let TypeScript accept the types as intended (TS playground link):If this is related to existing tickets, include links to them as well. Use the syntax
fixes #[issue number]
(ex:fixes #123
).If your PR is non-trivial and you'd like to schedule a synchronous review, please add it to the weekly meeting agenda: https://docs.google.com/document/d/12PjTvv21k6LIky6bNQVnsplMLLnmEuypTLQF8a-8Wss/edit
Checklist
npm run test:update
to update snapshots, if needed.