Uh oh!
There was an error while loading. Please reload this page.
TypedDict 'in' narrowing w/o @final - #15698
Conversation
This comment has been minimized.
This comment has been minimized.
ikonst
commented
Jul 18, 2023
Positive effect in Rapptz/discord.py: |
ikonst
commented
Jul 31, 2023
@hauntsaninja since you approved #13838, can take a look? |
| d_final: DFinal | ||
| if 'spam' in d_final: | ||
| spam = 'ham' # E: Statement is unreachable |
There was a problem hiding this comment.
Is this test really useless? E.g. this seems useful and I'm not sure where else it is tested
There was a problem hiding this comment.
Good point, brought it back in a68b87a (and also removed more @finals).
This comment has been minimized.
This comment has been minimized.
ikonst
commented
Aug 18, 2023
@hauntsaninja another review? |
Diff from mypy_primer, showing the effect of this PR on open source code: discord.py (https://github.com/Rapptz/discord.py)
- discord/audit_logs.py:251: error: Argument "allow_list" to "AutoModTrigger" has incompatible type "object"; expected "list[str] | None" [arg-type]- discord/audit_logs.py:257: error: Argument "allow_list" to "AutoModTrigger" has incompatible type "object"; expected "list[str] | None" [arg-type]- discord/audit_logs.py:258: error: Argument "regex_patterns" to "AutoModTrigger" has incompatible type "object"; expected "list[str] | None" [arg-type] |
gandhis1
commented
Nov 14, 2023
This issue recently came up on another forum, and it seems the fix is stuck in limbo. The diff seems fairly innocuous, the build/tests pass, and the discussion elsewhere seemed to conclude that this is the correct fix. Further, pyright merged the equivalent fix. Is it possible for this to be revisited? |
ikonst
commented
Jan 12, 2024
@hauntsaninja Can we revisit this? |
hauntsaninja
commented
Jan 15, 2024
I think it would be good to try and get whatever behaviour is desired here into the typing spec. Would you or gandhis1 be willing to follow the steps here? https://github.com/python/typing-council#decisions |
We shouldn't require
T1andT2to be final, to have'foo' in Union[TD1, TD2]narrowing take place. We previously (#13838) thought we should, but @erictraut made a good point that TypedDicts are structured types (like interfaces in TypeScript) and we shouldn't consider class hierarchy when type-matching but rather just the structure.Fixes#15697.