Skip to content

overload with wrong return type is ignored #17857

@ggirol-rc

Description

@ggirol-rc

Bug Report

When one of the alternatives of an overload has a return type T which is a subtype of the return type of the annotation U but that the body of the function returns a type V which is a subtype of U but not T, no error is reported

To Reproduce

from typing import overload

@overload
def f(a: int) -> str:
    ...

# this is completely wrong
@overload
def f(a: str) -> bool:
    ...


def f(a: str | int) -> str | bool:
    return "Hello"

reveal_type(f("some string"))

https://mypy-play.net/?mypy=latest&python=3.12&flags=strict&gist=83c5a353e087d8bbe03d542e7340b4b5

Expected Behavior

mypy should complain that the body of the function returns an str which is incompatible with type bool (overload 2)

More generally, for each overload signature, mypy should check that the body of the function typechecks with the overload signature.

Actual Behavior

mypy reports no error

main.py:16: note: Revealed type is "builtins.bool"
Success: no issues found in 1 source file

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions