Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

210
Visualizações
Escribir una función que devuelve una matriz de tipo "sin nulo" arroja un error El tipo 'T' no se puede asignar al tipo 'NonNull'. (2322)

Siguiendo esta respuesta , tengo una función que elimina elementos null de una matriz (pero no undefined ):

 // JavaScript const dropNull = arr => { return arr.flatMap((f) => (f === null ? [] : f)); };

Y ahora quiero usar TypeScript para definir estrictamente los tipos de entrada y salida de la función:

  • entrada: cualquier matriz
  • salida: cualquier matriz que no contenga null

Esta respuesta muestra una situación muy similar, pero opuesta a la mía: mientras que quieren permitir null pero restringir undefined , quiero restringir null y permitir undefined . Así que inspirado por la respuesta, hice el ajuste inverso:

 type NonNull<T> = T extends null ? never : T[]; const dropNull = <T>(arr: T[]): NonNull<T>[] => { return arr.flatMap((f) => (f === null ? [] : f)); };

Pero como muestra este REPL , aparece un error:

El tipo 'T[]' no se puede asignar al tipo 'NonNull[]'.
El tipo 'T' no se puede asignar al tipo 'NonNull'.(2322)

Investigando este error, he visto respuestas como esta , pero no pude encontrar la manera de adoptarlo en mi caso.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Es difícil para TypeScript imponer la devolución de un tipo condicional, porque es difícil saber cómo su lógica corresponde a ese tipo. Pero creo que lo está complicando demasiado y puede eludir el problema por completo.

 const dropNull = <T>(arr: (T | null)[]): T[] => { return arr.flatMap((f) => (f === null ? [] : f)); };

Aquí el parámetro genérico T se infiere como un tipo que no contiene null . Y el argumento es una matriz que se puede llenar con T o null .

Luego, simplemente puede devolver valores no nulos de la matriz y TypeScript es feliz.

 const numsOrNull = [1,2,null] // (number | null)[] const nums = dropNull(numsOrNull) // number[]

Patio de juegos

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda