Saltar al contenido

¿Mecanografiado y operador de extensión?

Este team de redactores ha pasado mucho tiempo investigando respuestas a tus preguntas, te compartimos la respuesta así que deseamos servirte de mucha ayuda.

Solución:

Así que hay una pequeña cláusula que quizás te hayas perdido:

La verificación de tipo requiere que los elementos extendidos coincidan con un parámetro de descanso.

Sin parámetro de reposo

Pero puede usar una aserción de tipo para volverse dinámico… y se convertirá de nuevo a ES5 / ES3 para usted:

function foo(x:number, y:number, z:number)  
 console.log(x,y,z);

var args:number[] = [0, 1, 2];

(foo)(...args);

Esto da como resultado lo mismo apply llamada de función que esperarías:

function foo(x, y, z) 
    console.log(x, y, z);

var args = [0, 1, 2];
foo.apply(void 0, args);

Con parámetro de reposo

La alternativa es que todo funcione como espera si la función acepta un parámetro de descanso.

function foo(...x: number[])  
 console.log(JSON.stringify(x));

var args:number[] = [0, 1, 2];

foo(...args);

Creo que @Fenton lo explica muy bien, pero me gustaría agregar más documentación y posibles soluciones.

Soluciones:

Sobrecarga de funciones. Prefiero esta solución en este caso porque mantiene algún tipo de seguridad y evita ignorar y cualquier. No es necesario volver a escribir el método original y la llamada a la función.

function foo(...args: number[]): void
function foo(x: number, y: number, z: number) 
  console.log(x, y, z);

var args: number[] = [0, 1, 2];

foo(...args);

Usar @ts-ignore para ignorar una línea específica, TypeScript 2.3

function foo(x: number, y: number, z: number) 
  console.log(x, y, z);

var args: number[] = [0, 1, 2];
// @ts-ignore
foo(...args);

Usar como cualquiera.

function foo(x: number, y: number, z: number) 
  console.log(x, y, z);

var args: number[] = [0, 1, 2];

(foo as any)(...args);

Enlace con documentación sobre el operador de propagación:

https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-1.html

Discusiones al respecto:

https://github.com/Microsoft/TypeScript/issues/5296 https://github.com/Microsoft/TypeScript/issues/11780 https://github.com/Microsoft/TypeScript/issues/14981 https://github .com/Microsoft/TypeScript/issues/15375

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *