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