Skip to content

Commit e1b3095

Browse files
committed
Added missing support for Unpack to TypeAliasType variant
1 parent 9911ac7 commit e1b3095

File tree

1 file changed

+24
-9
lines changed

1 file changed

+24
-9
lines changed

src/typing_extensions.py

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3543,25 +3543,40 @@ def __getitem__(self, parameters):
35433543
else:
35443544
def _check_parameter(self, item, typ=_marker):
35453545
# Allow [], [int], [int, str], [int, ...], [int, T]
3546-
if not isinstance(typ, ParamSpec) and typ is not _marker:
3547-
return typing._type_check(
3548-
item, f'Subscripting {self.__name__} requires a type.'
3546+
if isinstance(item, _UnpackAlias):
3547+
args = (
3548+
item.__args__ # e.g. (int, str)
3549+
if sys.version_info[:2] >= (3, 9)
3550+
else item.__args__ # (typing.Tuple[int, float],)
35493551
)
3550-
if item is ...:
3551-
return ...
3552+
# Unpack
3553+
yield from [checked
3554+
for arg in args
3555+
for checked in self._check_parameter(arg)]
3556+
elif item is ...:
3557+
yield ...
35523558
elif isinstance(item, list) and typ is not _marker:
3553-
return [self._check_parameter(arg) for arg in item]
3559+
yield [checked
3560+
for arg in item
3561+
for checked in self._check_parameter(arg)]
35543562
else:
3555-
return typing._type_check(
3563+
yield typing._type_check(
35563564
item, f'Subscripting {self.__name__} requires a type.'
35573565
)
35583566

35593567
def __getitem__(self, parameters):
35603568
if not isinstance(parameters, tuple):
35613569
parameters = (parameters,)
3570+
param_difference = (len(parameters) - len(self.__type_params__))
3571+
if param_difference > 0:
3572+
# invalid case that does not raise an error, fill with dummys
3573+
type_params = [*self.__type_params__, *[Any] * param_difference]
3574+
else:
3575+
type_params = self.__type_params__
35623576
parameters = [
3563-
self._check_parameter(item, typ)
3564-
for item, typ in zip(parameters, self.__type_params__)
3577+
checked
3578+
for item, typ in zip(parameters, type_params)
3579+
for checked in self._check_parameter(item, typ)
35653580
]
35663581
alias = typing._GenericAlias(self, tuple(parameters))
35673582
alias.__name__ = self.__name__

0 commit comments

Comments
 (0)