@@ -1443,7 +1443,7 @@ else:
1443
1443
[builtins fixtures/isinstancelist.pyi]
1444
1444
1445
1445
1446
- [case testIssubclasDestructuringUnions ]
1446
+ [case testIssubclasDestructuringUnions1 ]
1447
1447
from typing import Union, List, Tuple, Dict, Type
1448
1448
def f(x: Union[Type[int], Type[str], Type[List]]) -> None:
1449
1449
if issubclass(x, (str, (int,))):
@@ -1465,6 +1465,51 @@ def f(x: Union[Type[int], Type[str], Type[List]]) -> None:
1465
1465
[builtins fixtures/isinstancelist.pyi]
1466
1466
1467
1467
1468
+ [case testIssubclasDestructuringUnions2]
1469
+ from typing import Union, List, Tuple, Dict, Type
1470
+ def f(x: Type[Union[int, str, List]]) -> None:
1471
+ if issubclass(x, (str, (int,))):
1472
+ reveal_type(x) # E: Revealed type is 'Union[Type[builtins.int], Type[builtins.str]]'
1473
+ reveal_type(x()) # E: Revealed type is 'Union[builtins.int, builtins.str]'
1474
+ x()[1] # E: Value of type "Union[int, str]" is not indexable
1475
+ else:
1476
+ reveal_type(x) # E: Revealed type is 'Type[builtins.list]'
1477
+ reveal_type(x()) # E: Revealed type is 'builtins.list[<uninhabited>]'
1478
+ x()[1]
1479
+ reveal_type(x) # E: Revealed type is 'Union[Type[builtins.int], Type[builtins.str], Type[builtins.list]]'
1480
+ reveal_type(x()) # E: Revealed type is 'Union[builtins.int, builtins.str, builtins.list[<uninhabited>]]'
1481
+ if issubclass(x, (str, (list,))):
1482
+ reveal_type(x) # E: Revealed type is 'Union[Type[builtins.str], Type[builtins.list[Any]]]'
1483
+ reveal_type(x()) # E: Revealed type is 'Union[builtins.str, builtins.list[<uninhabited>]]'
1484
+ x()[1]
1485
+ reveal_type(x) # E: Revealed type is 'Union[Type[builtins.int], Type[builtins.str], Type[builtins.list[Any]]]'
1486
+ reveal_type(x()) # E: Revealed type is 'Union[builtins.int, builtins.str, builtins.list[<uninhabited>]]'
1487
+ [builtins fixtures/isinstancelist.pyi]
1488
+
1489
+ [case testIssubclasDestructuringUnions3]
1490
+ from typing import Union, List, Tuple, Dict, Type
1491
+ def f(x: Type[Union[int, str, List]]) -> None:
1492
+ reveal_type(x) # E: Revealed type is 'Union[Type[builtins.int], Type[builtins.str], Type[builtins.list]]'
1493
+ reveal_type(x()) # E: Revealed type is 'Union[builtins.int, builtins.str, builtins.list[<uninhabited>]]'
1494
+ if issubclass(x, (str, (int,))):
1495
+ reveal_type(x) # E: Revealed type is 'Union[Type[builtins.int], Type[builtins.str]]'
1496
+ reveal_type(x()) # E: Revealed type is 'Union[builtins.int, builtins.str]'
1497
+ x()[1] # E: Value of type "Union[int, str]" is not indexable
1498
+ else:
1499
+ reveal_type(x) # E: Revealed type is 'Type[builtins.list]'
1500
+ reveal_type(x()) # E: Revealed type is 'builtins.list[<uninhabited>]'
1501
+ x()[1]
1502
+ reveal_type(x) # E: Revealed type is 'Union[Type[builtins.int], Type[builtins.str], Type[builtins.list]]'
1503
+ reveal_type(x()) # E: Revealed type is 'Union[builtins.int, builtins.str, builtins.list[<uninhabited>]]'
1504
+ if issubclass(x, (str, (list,))):
1505
+ reveal_type(x) # E: Revealed type is 'Union[Type[builtins.str], Type[builtins.list[Any]]]'
1506
+ reveal_type(x()) # E: Revealed type is 'Union[builtins.str, builtins.list[<uninhabited>]]'
1507
+ x()[1]
1508
+ reveal_type(x) # E: Revealed type is 'Union[Type[builtins.int], Type[builtins.str], Type[builtins.list[Any]]]'
1509
+ reveal_type(x()) # E: Revealed type is 'Union[builtins.int, builtins.str, builtins.list[<uninhabited>]]'
1510
+ [builtins fixtures/isinstancelist.pyi]
1511
+
1512
+
1468
1513
[case testIssubclass]
1469
1514
from typing import Type, ClassVar
1470
1515
0 commit comments