Preserve modifiers in homomorphic mapped types#12563
Merged
Uh oh!
There was an error while loading. Please reload this page.
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.
WIth this PR we preserve property modifiers in homomorphic (structure preserving) mapped types. A mapped type of the form
{[P in keyof T]: X }is homomorphic withT(because it has the same set of properties asT) and now preserves the optional and readonly modifiers as they exist on the properties inT.Since the predefined mapped types
Partial<T>andReadonly<T>are homomorphic they now preserve already existing property modifiers.EDIT: With #12826 the predefined
Pick<T, K>type now also preserves property modifiers. Before that PR, Pick<T, K> could be used to strip modifiers, but that is no longer possible.Fixes#12542.