41 votes

Le type 'null' n'est pas attribuable au type 'T'

j'ai cette méthode générique

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


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

j'obtiens l'erreur de syntaxe

TS2322 : Le type 'null' n'est pas attribuable au type 'T'.

Je m'attends à ce que cela se compile car T pourrait être null .

quelle est la bonne façon de résoudre ce problème

78voto

Murat Karagöz Points 13113

Vous devez déclarer le type de retour comme null ou désactiver strictNullChecks dans votre tsconfig

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

ou vous pouvez taper null as any par exemple

  return null as any;

2voto

Maciej Sikora Points 6777

Je proposerais ici des surcharges de fonctions afin de supprimer la casse nulle pour les arguments non nuls. Envisager:

 class Foo { 
    public static bar<T>(x: T): T // overload
    public static bar(x: null): null // overload
    public static bar<T>(x: T) {
        if (x === null) {
            return null;
        } else
            return x;
     }
 }

const x = Foo.bar(1 as number); // x is number, never a null
const y = Foo.bar(null); // its null
const z = Foo.bar('s' as string | null); // its string | null

Ainsi, l'implémentation a le type T | null mais grâce à la surcharge pour les types qui ne sont jamais nuls, nous avons le type de retour de T donc sans possibilité nulle.

0voto

Omar RB Points 1

Vous pouvez mettre

 return null!;

ça a marché pour moi

-4voto

Ramin Ar Points 21

Au lieu de null attribuez undefined aux variables.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X