@@ -72,3 +72,38 @@ Ts1 = TypeVarTuple("Ts1", default=2) # E: The default argument to TypeVarTuple m
7272Ts2 = TypeVarTuple("Ts2", default=int) # E: The default argument to TypeVarTuple must be an Unpacked tuple
7373Ts3 = TypeVarTuple("Ts3", default=Tuple[int]) # E: The default argument to TypeVarTuple must be an Unpacked tuple
7474[builtins fixtures/tuple.pyi]
75+
76+ [case testTypeVarDefaultsFunctions]
77+ from typing import TypeVar, ParamSpec, List, Union, Callable, Tuple
78+ from typing_extensions import TypeVarTuple, Unpack
79+
80+ T1 = TypeVar("T1", default=str)
81+ T2 = TypeVar("T2", bound=str, default=str)
82+ T3 = TypeVar("T3", bytes, str, default=str)
83+ P1 = ParamSpec("P1", default=[int, str])
84+ Ts1 = TypeVarTuple("Ts1", default=Unpack[Tuple[int, str]])
85+
86+ def callback1(x: str) -> None: ...
87+
88+ def func_a1(x: Union[int, T1]) -> T1: ...
89+ reveal_type(func_a1(2)) # N: Revealed type is "builtins.str"
90+ reveal_type(func_a1(2.1)) # N: Revealed type is "builtins.float"
91+
92+ def func_a2(x: Union[int, T1]) -> List[T1]: ...
93+ reveal_type(func_a2(2)) # N: Revealed type is "builtins.list[builtins.str]"
94+ reveal_type(func_a2(2.1)) # N: Revealed type is "builtins.list[builtins.float]"
95+
96+ def func_a3(x: Union[int, T2]) -> T2: ...
97+ reveal_type(func_a3(2)) # N: Revealed type is "builtins.str"
98+
99+ def func_a4(x: Union[int, T3]) -> T3: ...
100+ reveal_type(func_a4(2)) # N: Revealed type is "builtins.str"
101+
102+ def func_b1(x: Union[int, Callable[P1, None]]) -> Callable[P1, None]: ...
103+ reveal_type(func_b1(callback1)) # N: Revealed type is "def (x: builtins.str)"
104+ reveal_type(func_b1(2)) # N: Revealed type is "def (builtins.int, builtins.str)"
105+
106+ def func_c1(x: Union[int, Callable[[Unpack[Ts1]], None]]) -> Tuple[Unpack[Ts1]]: ...
107+ # reveal_type(func_c1(callback1)) # Revealed type is "builtins.tuple[str]" # TODO
108+ # reveal_type(func_c1(2)) # Revealed type is "builtins.tuple[builtins.int, builtins.str]" # TODO
109+ [builtins fixtures/tuple.pyi]
0 commit comments