Как исправить ошибку MyPy [return-value], когда тип на самом деле правильный
Я использую Django-Ninja + MyPy и получаю ошибку, что тип, который он получил tuple[int, dict[str, str]]" не является корректным, так как не соответствует ни одному из tuple[int, None] | tuple[int, DetailType] типов, а является именно вторым типом. Потому что в других частях кода он может правильно понять, что в качестве ключа у него "detail". Но как только я использую Union[...], он почему-то не может посмотреть рекурсивно?
apps/users/views.py:106: error: Incompatible return value type (got "tuple[int, Message]", expected "tuple[int, None] | tuple[int, DetailType]") [return-value]
Вот как выглядят мои типы:
DetailType = TypedDict("DetailType", {"detail": str})
MessageType = tuple[int, DetailType]
NoContentType = tuple[int, None]
А это полный код, в котором mypy возвращает ошибку:
@post("me/password/change/", response={204: None, 401: Message}, url_name="users_me_password_change")
def change_password(request: HttpRequest, data: ChangePasswordRequest) -> Union[NoContentType, MessageType]: <<< THIS IS RETURN TYPE
user = request.user
if not user.check_password(data.password):
return 401, {"detail": "Password is incorrect."} <<< IN THIS LINE IS MYPY ERROR
user.set_password(data.new_password)
user.save()
return 204, None