typescript - Tipul 'null' nu poate fi atribuit tipului 'T'


Am această metodă generică

class Foo { 
     public static bar<T>(x: T): T {
         ...
         if(x === null)
             return null; //<------- syntax error
         ...
     }
 }


... //somewhere
const x = Foo.bar<number | null>(1);

Primește eroarea de sintaxă

TS2322: Tipul 'null' nu poate fi atribuit tipului 'T'.

Mă aștept ca acesta să se compileze deoarece T ar putea fi null.

care este modul corect de a rezolva această problemă

Răspuns #1

Trebuie să declari tipul de return ca null sau să dezactivezi strictNullChecks în tsconfig-ul tău

public static bar<T>(x: T): T | null

sau ai putea tasta null as any de exemplu.

 return null as any;

Răspunsul #2

Începând cu versiunea 3.9.5, TypeScript aplică strictNullChecks pe numbers și strings, doar ca să numim câteva. De exemplu, următorul cod va genera o eroare în timpul compilării:

let x: number = null;

Pentru a evita această eroare, aveți două opțiuni:

  • Setați strictNullChecks=false în tsconfig.json.
  • Declară un tip de uniune number | null:

    let x: number | null = null;
    

Răspunsul #3

Poți pune

return null!;

A funcționat pentru mine