Pesquisa de site

typescript - O tipo 'null' não é atribuível ao tipo 'T'


Eu tenho este método genérico

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


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

Estou recebendo o erro de sintaxe

TS2322: O tipo 'null' não é atribuído ao tipo 'T'.

Estou esperando que isso compile porque T poderia ser null.

qual é a maneira adequada de resolver este problema

Resposta #1

Você precisa declarar o tipo de retorno como null ou desligar strictNullChecks no seu tsconfig

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

ou você poderia digitar null como any por exemplo.

 return null as any;

Resposta #2

Desde a versão 3.9.5, o TypeScript aplica strictNullChecks em numbers e strings, só para citar alguns. Por exemplo, o código a seguir gerará um erro durante a compilação:

let x: number = null;

Para evitar esse erro, você tem duas opções:

  • Defina strictNullChecks=false em tsconfig.json.
  • Declare um número de tipo de união | null:

    let x: number | null = null;
    

Resposta #3

Você pode colocar

return null!;

Funcionou para mim

Artigos relacionados