Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

5.8K
Views
¿Qué es el error "no asignable al parámetro de tipo nunca" en TypeScript?

El código es:

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

Recibo el siguiente error de TS:

[ts] El argumento de tipo 'cadena' no se puede asignar al parámetro de tipo 'nunca'.

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

over 4 years ago · Santiago Trujillo
15 answers
Answer question

0

Todo lo que tiene que hacer es definir su result como una matriz de cadenas, como la siguiente:

 const result : string[] = [];

Sin definir el tipo de matriz, por defecto será never . Entonces, cuando intentó agregarle una cadena, era una falta de coincidencia de tipo, por lo que arrojó el error que vio.

over 4 years ago · Santiago Trujillo Report

0

Debe escribir result en una matriz de string const result: string[] = []; .

over 4 years ago · Santiago Trujillo Report

0

Otra forma es:

 const result = [] as any;
over 4 years ago · Santiago Trujillo Report

0

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

 const result = []

Por lo general, se trataría como si escribiera:

 const result:any[] = []

sin embargo, si tiene noImplicitAny FALSE Y strictNullChecks TRUE en su tsconfig, se trata como:

 const result:never[] = []

Este comportamiento desafía toda lógica, en mi humilde opinión. ¿Activar comprobaciones nulas cambia los tipos de entrada de una matriz? ¿Y luego activar noImplicitAny realmente restaura el uso de any sin ninguna advertencia?

Cuando realmente tiene una matriz de any , no debería necesitar indicarlo con código adicional.

over 4 years ago · Santiago Trujillo Report

0

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

 const enhancers: Array<any> = [];

Utilizar:

 if (typeof devToolsExtension === 'function') { enhancers.push(devToolsExtension()) }
over 4 years ago · Santiago Trujillo Report

0

Estaba teniendo el mismo error en la función sin estado de ReactJS mientras usaba ReactJs Hook useState . Quería establecer el estado de una matriz de objetos, así que si uso la siguiente manera

 const [items , setItems] = useState([]);

y actualizar el estado de esta manera:

 const item = { id : new Date().getTime() , text : 'New Text' }; setItems([ item , ...items ]);

Estaba recibiendo un error:

Argumento de tipo '{ id: número; text: any }' no se puede asignar a un parámetro de tipo 'nunca'

pero si lo haces así,

 const [items , setItems] = useState([{}]);

El error desapareció, pero hay un elemento en el índice 0 que no tiene ningún dato (no quiero eso).

entonces la solución que encontré es:

 const [items , setItems] = useState([] as any);
over 4 years ago · Santiago Trujillo Report

0

Elimine "strictNullChecks": verdadero de "compilerOptions" o configúrelo como falso en el archivo tsconfig.json de su aplicación Ng. Estos errores desaparecerán como cualquier cosa y su aplicación se compilará con éxito.

Descargo de responsabilidad: Esto es solo una solución. Este error aparece solo cuando los cheques nulos no se manejan correctamente, lo que en cualquier caso no es una buena manera de hacer las cosas.

over 4 years ago · Santiago Trujillo Report

0

Recibí el mismo error en el componente de la función ReactJS, usando el gancho useState de ReactJS.

La solución fue declarar el tipo de useState en la inicialización usando paréntesis angulares:

 // Example: type of useState is an array of string const [items , setItems] = useState<string[]>([]);
over 4 years ago · Santiago Trujillo Report

0

La solución que encontré fue

 const [files, setFiles] = useState([] as any);
over 4 years ago · Santiago Trujillo Report

0

Una razón más para el error.

si está exportando después de envolver el componente con connect () (), entonces los accesorios pueden dar un error de mecanografiado
Solución: no exploré mucho porque tenía la opción de reemplazar la función de conexión con el gancho useSelector
por ejemplo

 /* Comp.tsx */ interface IComp { a: number } const Comp = ({a}:IComp) => <div>{a}</div> /* ** below line is culprit, you are exporting default the return value of Connect and there is no types added to that return value of that connect()(Comp) ** */ export default connect()(Comp) -- /* App.tsx */ const App = () => { /** below line gives same error [ts] Argument of type 'number' is not assignable to parameter of type 'never' */ return <Comp a={3} /> }
over 4 years ago · Santiago Trujillo Report

0

Error: el argumento de tipo 'cualquiera' no se puede asignar al parámetro de tipo 'nunca'.

En tsconfig.json -

 "noImplicitReturns": false, "strictNullChecks":false,

ingrese la descripción de la imagen aquí

Solución: escriba como 'nunca'

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Report

0

también podría agregar as string[]

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

Lo hice cuando era parte de un objeto.

 let complexObj = { arrData : [], anotherKey: anotherValue ... } (arrData as string[]).push('text')
over 4 years ago · Santiago Trujillo Report

0

Suponiendo que su linter esté bien con "cualquier" tipo:

Si no conoce el tipo de valores que llenarán la matriz, puede hacerlo y el resultado inferirá el tipo.

 const result: any[] = []
over 4 years ago · Santiago Trujillo Report

0

Todo lo que tiene que hacer es definir su resultado como una matriz cualquiera, como la siguiente:

resultado: cualquier = [];

over 4 years ago · Santiago Trujillo Report

0

Recibí el error al definir (inicializar) una matriz de la siguiente manera:

 let mainMenu: menuObjectInterface[] | [] = [];

El código en el que tengo el problema:

 let mainMenu: menuObjectInterface[] | [] = []; dbresult.rows.forEach((m) => { if (!mainMenu.find((e) => e.menucode === m.menucode)) { // Not found in mainMenu, yet mainMenu.push({menucode: m.menucode, menudescription: m.menudescription}) // Here the error } })

El error fue: TS2322: el tipo 'cualquiera' no se puede asignar al tipo 'nunca'

La razón fue que la matriz se inicializó también con la opción de una matriz vacía. Typescript vio un empujón a un tipo que también puede estar vacío. De ahí el error.

Cambiar la línea a esto solucionó el error:

 let mainMenu: menuObjectInterface[] = [];
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!