-
Notifications
You must be signed in to change notification settings - Fork 217
Open
Labels
Description
Summary
https://play.ty.dev/7e986f4b-4688-4a6f-951b-f78ef9eebb09
from typing import Any, overload, assert_type
class A[T]: # covariant
def get(self) -> T: ...
@overload
def op(l: A[None], r: A[None]) -> A[None]: ...
@overload
def op(l: A[None], r: A[Any]) -> A[None]: ...
@overload
def op(l: A[Any], r: A[None]) -> A[None]: ...
@overload
def op(l: A[Any], r: A[Any]) -> A[Any]: ...
def test(x: A[None], y: A[Any]) -> None:
assert_type(op(x, x), A[None]) # spec: ✅️
assert_type(op(x, y), A[None]) # spec: ✅️
assert_type(op(y, x), A[None]) # spec: ✅️
assert_type(op(y, y), Any) # spec: ❌️ (expected Any)ty incorrectly infers A[None] for op(A[Any], A[Any]). See python/typing#2196 and #665 for context.
Single argument ambiguous overloads seem to currently infer as Unknown.
Version
No response
Reactions are currently unavailable