Wrong return type inferred for overload with a type variable
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 20.6k
- Forks
- 3.3k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
Bug Report
from typing import TypeVar, overload
_T = TypeVar("_T")
@overload
def getenv(key: str) -> str | None: ...
@overload
def getenv(key: str, default: _T) -> str | _T: ...
def getenv(key, default):
return key
def test(custom_var: str) -> str:
return getenv(custom_var) or getenv("V", "D")
https://mypy-play.net/?mypy=latest&python=3.12&gist=4d959cd7069a8495533bfeca1cd40729
Actual Behavior
main.py:16: error: Incompatible return value type (got "str | None", expected "str") [return-value]
Expected Behavior
This should type check without errors, since we have an or with a call that always returns str.
It works if I replace type variable with just str:
@overload
def getenv(key: str, default: str) -> str: ...
but something about _T and the union upsets it.
Your Environment
- Mypy version used: 1.13.0
- Mypy command-line flags: none
- Mypy configuration options from
mypy.ini(and other config files): none - Python version used: 3.10-3.13
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con la reproducción de Python proporcionada y confirma el comportamiento usando mypy 1.13.0 sin flags de configuración. Rastrea la resolución de sobrecargas y la inferencia de variables de tipo para las dos llamadas a getenv; después, añade una prueba de regresión que muestre que la expresión se acepta cuando el fallback devuelve str.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- devtools
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 42/100