Как сделать универсальный TypeVar в mypy необязательным? - PullRequest
0 голосов
/ 29 октября 2019

Можно ли требовать TypeVar в mypy только для разрешения не-1002 * типов? Например,

from typing import Callable, Optional, TypeVar
from typing_extensions import Protocol


T = TypeVar('T')

def mapper(callabl: Callable[..., T]) -> T:
    return callabl()

def bad_function() -> Optional[int]:
    return None

mapper(reveal_type(bad_function))

В этом примере bad_function относится к типу def () -> Union[builtins.int, None]. Я хотел бы, чтобы способ ограничить T привязкой к любому типу, который не является обязательным (то есть, не Union с None), чтобы этот фрагмент кода не проходил проверку типа. Другие контролеры, такие как Typescript (и встроенная система типов Kotlin), поддерживают это по умолчанию, поэтому мне было интересно, возможно ли это сделать и в mypy. Я знаю, что можно связать TypeVar s, но я не мог понять, что было бы правильно связать T в этом случае.

...