from typing import Literal, NotRequired, TypedDict
class Example(TypedDict):
key: NotRequired[Literal["value1", "value2"]]
def func(data: Example) -> None:
reveal_type(data.get("key", "value2"))
reveal_type(data["key"])
INFO sandbox.py:9:16-43: revealed type: Literal['value1', 'value2'] | str [reveal-type]
INFO sandbox.py:10:16-29: revealed type: Literal['value1', 'value2'] [reveal-type]
Describe the Bug
Using
.get()on a non-required key in a typed dict with a literal value passed as default resolves to a union of that key's type and str rather than a union of that key's type and a literal:Sandbox Link
https://pyrefly.org/sandbox/?project=N4IgZglgNgpgziAXKOBDAdgEwEYHsAeAdAA4CeS4ATrgLYAEALqcROgOZ0Q3G6UN0AZCAxiVUUADR0AcrgYAlGAEcArhEoxMUgCrNNAEQgBjBgB10580aio4cOgFF8qbrAAUu4geMMAlInM6ILoAaxhSRBk5RVV1TQBtIRExKHjTEAA3cRUYAEZ0qXSsqByAJnSAXQrLCywYMDowFXQjN0xUBlRIpxdiWF86AFoAPij0GAD0YLoNDJhxAH0mLzaO1EI2GAY3dLDSAroi7JhykF9fQODZ%2BaglvVXOtJA9yov0EAkQMg0wKFJCBi0KAUADEdAACqQfn86GgsHh8HQjLh0JA2CoxAwICjCOYwQBlGAwOgACwYDGIcEQAHpqd96n9CLw2NSYOhqZhcEY4NTkaiIOjMdj2Y1eHRUFloKhsLAkSi0RiOsK6LhiFiUXBcegyAwSSjBnNKHBlQBeQ4gADMhFyp3M8VE1CN1XQzS4PD4mkGmDiJggczoZoA5AL0LwYIHzKGGIMNLENJhBntBqgjEZ4PYgwB3VCUdAR94AX0%2BKaxcwAYtAYBQ4TgCCRyAWgA
(Only applicable for extension issues) IDE Information
No response