Experimentelle Dekorateure in TypeScript: Ein Blick unter die Haube

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum schreit Ihr TypeScript wegen „experimenteller Dekorateure“?

\n\n

Haben Sie jemals die Kompilierung eines TypeScript-Projekts gestartet und in der Konsole so etwas gesehen wie:

\n\n
Experimental support for decorators is a feature that is subject to change in a future release. Set the 'experimentalDecorators' option in your 'tsconfig.json' or '--experimentalDecorators' to remove this warning.
\n\n

Wenn ja – Sie sind nicht allein. Diese Frage auf Stack Overflow hat tausende Aufrufe und Dutzende Antworten gesammelt. Aber die meisten schlagen einfach vor, „das Flag zu aktivieren und zu vergessen“. Wir gehen heute weiter: Wir werden verstehen, was die experimental decorators warning in TypeScript ist, woher sie kommt, wie sie unter der Haube funktioniert und warum TypeScript Dekorateure überhaupt als „experimentell“ betrachtet.

\n\n

Was sind Dekorateure in TypeScript (und warum sind sie experimental)?

\n\n

Dekorateure sind ein mächtiges Werkzeug der Metaprogrammierung. Sie ermöglichen es, Klassen, Methoden, Eigenschaften und Parameter zur Laufzeit zu annotieren und zu modifizieren. Wenn Sie mit Angular, NestJS oder TypeORM gearbeitet haben, sind Sie ihnen bereits begegnet:

\n\n
@Component({\n  selector: 'app-root',\n  templateUrl: './app.component.html'\n})\nclass AppComponent {}
\n\n

Aber hier liegt der Haken: Der JavaScript-Standard für Dekorateure (TC39 proposal) befindet sich noch immer in der Stage 3. Das bedeutet, dass sich Syntax und Semantik ändern können. TypeScript, als Obermenge von JavaScript, kann die Implementierung nicht einfach „einfrieren“ – es bietet experimentelle Unterstützung für Dekorateure über das Flag experimentalDecorators.

\n\n

Wenn Sie diese Option aktivieren, generiert der TypeScript-Compiler Code, der veralten oder bei einem Update des Standards brechen kann. Deshalb warnt er ehrlich: „Du nutzt es auf eigenes Risiko“.

\n\n

Wie funktioniert die experimental decorators warning unter der Haube des Compilers?

\n\n

Um die Warnung zu verstehen, werfen wir einen Blick in den Quellcode von TypeScript. In der Datei checker.ts (ja, das ist eine echte Datei im Compiler) gibt es die Funktion checkGrammarForDecorator. Wenn der Parser auf einen Dekorateur trifft, prüft der Compiler, ob das Flag experimentalDecorators in der tsconfig.json gesetzt ist.

\n\n

Wenn das Flag nicht gesetzt ist, generiert er eine Diagnosemeldung – genau diese Warnung. Es ist kein Fehler (der Code wird trotzdem kompiliert), aber der Compiler erinnert eindringlich: „Hey, du nutzt eine Funktion, die sich ändern kann!“.

\n\n

So sieht die vereinfachte Logik aus:

\n\n
// Pseudocode der tatsächlichen TypeScript-Logik\nfunction checkDecoratorUsage(decorator: Decorator, options: CompilerOptions) {\n  if (!options.experimentalDecorators) {\n    reportDiagnostic({\n      code: 1219,\n      message: "Experimental support for decorators is a feature that is subject to change in a future release..."\n    });\n  }\n}
\n\n

Der Fehlercode 1219 ist genau die Warnung, die Sie sehen. Und der Code 1220 ist eine ähnliche Warnung für emitDecoratorMetadata (ein weiteres experimentelles Flag, über das wir später sprechen werden).

\n\n

So deaktivieren Sie die experimental decorators warning: 3 Methoden

\n\n

Der einfachste Weg ist, das Flag in der tsconfig.json hinzuzufügen:

\n\n
{\n  "compilerOptions": {\n    "experimentalDecorators": true\n  }\n}
\n\n

Wenn Sie die Kommandozeile verwenden:

\n\n
tsc --experimentalDecorators
\n\n

Oder wenn Sie keine tsconfig.json haben, können Sie das Flag direkt übergeben:

\n\n
npx tsc --experimentalDecorators src/index.ts
\n\n

Danach verschwindet die Warnung. Aber das ist nur die Spitze des Eisbergs. Lassen Sie uns verstehen, was tatsächlich passiert, wenn Sie experimentalDecorators aktivieren.

\n\n

Was generiert der Compiler unter der Haube?

\n\n

Wenn Sie einen Klassen-Dekorateur schreiben

Blogs

Buchempfehlungen