typescript - ¿Qué es la 'sintaxis as' señalada por tslint?
Actualicé tslint y ahora se queja de:
ERROR: src/Metronome/JobFetcher.ts[13, 32]: Type assertion using the '<>' syntax is forbidden. Use the 'as' syntax instead.
El código ofensivo se ve así:
const jobs = <JobConfig[]> <any> await rp(fetchJobsOptions);
¿Qué es la sintaxis 'as' y por qué debería usarla?
Respuesta #1
Refactoriza tu código así:
const jobs = await rp(fetchJobsOptions) as JobConfig[];
Como se señala en el libro TypeScript Deep Dive de Basarat Ali Syed, se dice sobre la conversión de tipos:
como foo vs.
<foo>Originalmente, la sintaxis que se añadió fue
<foo>. Esto se demuestra a continuación:var foo: any; var bar = <string> foo; // bar is now of type "string"Sin embargo, hay una ambigüedad en la gramática del lenguaje al usar
<foo> style assertions in JSX: var foo = <string>bar; </string>Por lo tanto, ahora se recomienda que simplemente uses 'foo' para mantener la coherencia.
Aserción de tipo vs. Conversión de tipo
La razón por la que no se llama "conversión de tipo" es que la conversión generalmente implica algún tipo de soporte en tiempo de ejecución. Sin embargo, las afirmaciones de tipo son puramente una construcción en tiempo de compilación y una manera de que proporciones indicaciones al compilador sobre cómo deseas que se analice tu código.
Respuesta #2
Si quieres suprimir el error, también puedes ir a tslint.json e incluir
...
"rules": {
"no-angle-bracket-type-assertion": false,
...
}
...
siempre que no te importe la consistencia como se dijo.
