python / python/mypy

Optional[TypeVar] does not preserve type of TypeVar when given Union type

Aperta
#16,852 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug topic-join-v-union
Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

Bug Report

When passing a union into an Optional[TypeVar], we expect to preserve the type of the TypeVar.

To Reproduce

from typing import Optional, TypeVar, TypedDict, Union

T = TypeVar("T")


def non_null(var: Optional[T]) -> T:
    assert var is not None
    return var


def test(a_union: Union[str, int]) -> None:
    value: Union[str, int] = non_null(a_union)

Expected Behavior

Success: no issues found in 1 source file

Actual Behavior

test.py:16: error: Incompatible types in assignment (expression has type "object", variable has type "Union[str, int])"  [assignment]

Your Environment

  • Mypy version used: 1.8.0
  • Python version used: 3.9

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Non viene indicato alcun file o test del repository; inizia con il reproducer Python fornito ed esegui mypy su di esso per confermare l’errore object-versus-Union segnalato. Traccia la gestione di Optional[TypeVar] per un argomento Union e considera completato il lavoro quando l’esempio non segnala problemi, come previsto.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
devtools
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Specificata chiaramente
Idoneità per principianti
42/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.