81 votos

¿Qué es el error "not assignable to parameter of type never" en TypeScript?

Código es:

const foo = (foo: string) => {
  const result = []
  result.push(foo)
}

Recibo el siguiente error de TS:

[ts] El argumento de tipo 'string' no es asignable al parámetro de tipo 'nunca'.

¿Qué estoy haciendo mal? ¿Es esto un error?

117voto

Tha'er M. Al-Ajlouni Puntos 4519

Todo lo que tienes que hacer es definir tu result como un array de cadenas, tal como sigue:

const result : string[] = [];

Sin definir el tipo de array, por defecto será never. Por lo tanto, cuando intentaste agregar una cadena, hubo una incompatibilidad de tipos y por eso lanzó el error que viste.

8voto

neomib Puntos 309

Otra forma es:

const result: any[] = [];

5voto

Dino Puntos 1

Este parece ser un comportamiento extraño en TypeScript con el que están atrapados por razones heredadas. Si tienes el código:

const result = []

Normalmente se trataría como si hubieras escrito:

const result:any[] = []

sin embargo, si tienes tanto noImplicitAny en FALSE, Y strictNullChecks en TRUE en tu archivo tsconfig, se trata como:

const result:never[] = []

Este comportamiento desafía toda lógica, en mi humilde opinión. ¿Activar las comprobaciones de nulos cambia los tipos de entrada de un array? Y luego, ¿activar noImplicitAny en realidad restaura el uso de any sin advertencias?

Es poco intuitivo que agregar una comprobación de tipo adicional (noImplicitAny) resulte en una comprobación de tipos más relajada, especialmente cuando introduce lo que estabas intentando eliminar.

2voto

domready Puntos 234

Tienes que escribir result en un array de cadena const result: string[] = [];.

0voto

Mickers Puntos 894

Pude superar esto usando la palabra clave Array en lugar de corchetes vacíos:

const enhancers: Array = [];

Usa:

if (typeof devToolsExtension === 'function') {
  enhancers.push(devToolsExtension())
}

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X