web-dev-qa-db-fra.com

Quelle est la "syntaxe as" signalée par tslint?

J'ai mis à jour tslint et maintenant il se plaint de:

ERROR: src/Metronome/JobFetcher.ts[13, 32]: Type assertion using the '<>' syntax is forbidden. Use the 'as' syntax instead.

Le code incriminé ressemble à:

const jobs = <JobConfig[]> <any> await rp(fetchJobsOptions);

Quelle est la syntaxe as et pourquoi devrais-je l'utiliser?

13
k0pernikus

Refactorisez votre code comme ceci:

const jobs = await rp(fetchJobsOptions) as JobConfig[];

Comme indiqué dans le livre TypeScript Deep Dive de Basarat ALi Syed , il dit à propos de la conversion de type:

comme foo vs <foo>

À l'origine, la syntaxe ajoutée était <foo>. Ceci est démontré ci-dessous:

var foo: any;
var bar = <string> foo; // bar is now of type "string"

Cependant, il y a une ambiguïté dans la grammaire de la langue lors de l'utilisation

<foo> style assertions in JSX:
var foo = <string>bar;
</string>

Par conséquent, il est maintenant recommandé d'utiliser simplement foo pour la cohérence.

Assertion de type vs Casting

La raison pour laquelle elle n'est pas appelée "conversion de type" est que la conversion implique généralement une sorte de support d'exécution. Cependant, les assertions de type sont purement une construction au moment de la compilation et un moyen pour vous de fournir des conseils au compilateur sur la façon dont vous voulez que votre code soit analysé.

30
k0pernikus

Si vous souhaitez supprimer l'erreur, vous pouvez également aller à tslint.json et inclure

...
"rules": {
    "no-angle-bracket-type-assertion": false,
    ...
}
...

à condition que cela ne vous dérange pas la cohérence comme dit.

0
Abdulkabir Ojulari