Может ли mypy обнаружить неправильные типы возвращаемых TypedDict? - PullRequest
1 голос
/ 26 февраля 2020

Я пытаюсь заставить mypy работать достаточно полно для моего проекта.

from typing import TypedDict

OurDict = TypedDict('OurDict', {'x': int})

bad: OurDict = {'y': 2}  # mypy successfully marks wrong
good: OurDict = {'x': 2}  # mypy likes this


def get_bad() -> OurDict:
    return 234  # mypy successfully marks wrong


def get_good() -> OurDict:
    res = {'x': 2}
    return res  # mypy successfully marks correct


def get_should_be_bad() -> OurDict:
    return {'hello': 2, 'world': 1}  # mypy fails to see a problem

Кажется, что mypy может определить, соответствует ли словарь определению типа, когда он объявлен встроенным, но при проверке функции возвращаемые значения он только проверяет, что возвращаемое значение является своего рода словарем, а не желаемым типом. Это просто ограничение в дизайне или я что-то не так делаю?

1 Ответ

0 голосов
/ 28 февраля 2020

Оказывается, у mypy нет проблем с обнаружением этого, но я ошибочно подумал, что при наборе вызова mypy изнутри venv они будут использовать mypy внутри venv. Мне пришлось набрать python3 -m mypy, чтобы запустить правильный исполняемый файл.

...