typescript - significa - Mecanografiado y propagación operador?
traducir al español (2)
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 tipo. El método original y la llamada de función no necesitan ser reescritos en absoluto.
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);
Utilice @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 cualquier.
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 la documentación sobre el operador de propagación:
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-1.html
Discusiones sobre esto:
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
function foo(x:number, y:number, z:number) {
console.log(x,y,z);
}
var args:number[] = [0, 1, 2];
foo(...args);
¿Por qué recibo este error en Typescript Playground ???
Los parámetros suministrados no coinciden con ninguna firma del objetivo de llamada.
Entonces hay una pequeña cláusula que puede haber pasado por alto:
La verificación de tipos requiere que los elementos distribuidos coincidan con un parámetro de descanso.
Sin Rest Paramater
Pero puede usar una aserción de tipo para ser dinámica ... y se convertirá nuevamente a ES5 / ES3 por usted:
function foo(x:number, y:number, z:number) {
console.log(x,y,z);
}
var args:number[] = [0, 1, 2];
(<any>foo)(...args);
Esto da como resultado la misma llamada de función de apply
que esperaría:
function foo(x, y, z) {
console.log(x, y, z);
}
var args = [0, 1, 2];
foo.apply(void 0, args);
Con parámetro de descanso
La alternativa es que todo funcione tal como se espera si la función acepta un parámetro de reposo.
function foo(...x: number[]) {
console.log(JSON.stringify(x));
}
var args:number[] = [0, 1, 2];
foo(...args);