Website-Suche

typescript - Typ 'null' ist dem Typ 'T' nicht zuweisbar


Ich habe diese generische Methode

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


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

Ich bekomme den Syntaxfehler

TS2322: Der Typ 'null' kann nicht dem Typ 'T' zugewiesen werden.

Ich erwarte, dass dies kompiliert, weil T null sein könnte.

Was ist der richtige Weg, dieses Problem zu lösen?

Antwort #1

Sie müssen den Rückgabewert als null deklarieren oder strictNullChecks in Ihrer tsconfig deaktivieren

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

oder du könntest null als any eingeben, z.B.

 return null as any;

Antwort #2

Seit Version 3.9.5 erzwingt TypeScript strictNullChecks bei numbers und strings, um nur einige zu nennen. Zum Beispiel wird der folgende Code während der Kompilierung einen Fehler auslösen:

let x: number = null;

Um diesen Fehler zu vermeiden, haben Sie zwei Möglichkeiten:

  • Setze strictNullChecks=false in tsconfig.json.
  • Deklariere einen Union-Typ number | null:

    let x: number | null = null;
    

Antwort #3

Du kannst setzen

return null!;

Es hat bei mir funktioniert

Verwandte Artikel