Website-Suche

typescript - Was ist die "as-Syntax", auf die tslint hinweist?


Ich habe tslint aktualisiert und jetzt beschwert es sich über:

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

Der beanstandete Code sieht folgendermaßen aus:

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

Was ist eigentlich die 'as'-Syntax und warum sollte ich sie verwenden?

Antwort #1

Refaktorieren Sie Ihren Code so:

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

Wie im Buch TypeScript Deep Dive von Basarat Ali Syed hervorgehoben, heißt es über Typumwandlung:

als foo vs. <foo>

Ursprünglich wurde die Syntax <foo> hinzugefügt. Dies wird unten gezeigt:

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

Es gibt jedoch eine Mehrdeutigkeit in der Sprachgrammatik bei der Verwendung

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

Daher wird nun empfohlen, dass Sie einfach 'foo' aus Gründen der Konsistenz verwenden.

Typumwandlung vs. Typumwandlung durch Behauptung

Der Grund, warum es nicht „Type Casting“ genannt wird, ist, dass Casting allgemein eine Art Laufzeitunterstützung impliziert. Type Assertions sind jedoch rein eine Konstruktion zur Compile-Zeit und eine Möglichkeit für Sie, dem Compiler Hinweise darauf zu geben, wie Ihr Code analysiert werden soll.

Antwort #2

Wenn Sie den Fehler unterdrücken möchten, können Sie auch zu tslint.json gehen und einschließen

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

vorausgesetzt, Sie haben nichts gegen Konsistenz, wie gesagt.

Verwandte Artikel