Skip to content

assert_never on exclusive union of tuples (type narrowing issue?) #16835

Open
@hjwp

Description

@hjwp

I feel like this code should work but it doesn't. Am I missing something?

from typing_extensions import assert_never

class Left1:
    pass
class Left2:
    pass

class Right1:
    pass
class Right2:
    pass

# this function should take either left1+right1, or left2+right2

def foo(pair: tuple[Left1, Right1] | tuple[Left2, Right2]) -> str:
    match thing:
        case (Left1(), Right1()):
            return "1"
        case (Left2(), Right2()):
            return "2"
        case _:
            # at this point, we should have exhausted both possibilities in the union.
            assert_never(pair)

gives

src/pairs.py:27: error: Argument 1 to "assert_never" has incompatible type "Union[Tuple[Left1, Right1], Tuple[Left2, Right2]]"; expected "NoReturn"  [arg-type]

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions