Enable generic TypedDicts#13389
Merged
Enable generic TypedDicts #13389
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.
Fixes#3863
This builds on top of some infra I added for recursive types (Ref #13297). Implementation is quite straightforward. The only non-trivial thing is that when extending/merging TypedDicts, the item types need to me mapped to supertype during semantic analysis. This means we can't call
is_subtype()etc., and can in theory get types likeUnion[int, int]. But OTOH this equally applies to type aliases, and doesn't seem to cause problems.Btw the diff in
semanal_typeddict.pyis not as big as it looks. There was a giantif possible: ...that I found a bit annoying and replaced it withif not possible: return(IIRC GitHub has an option to ignore whitespace).An important note on runtime support for this: IIUC this should work in Python 3.11, and should work soon with
typing_extensionson earlier versions. I didn't add any version checks here. If someone is interested in adding those, please do this.