«as const» in TypeScript: Code vor dummen Fehlern retten

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

Einleitung: Warum verhält sich Ihr TypeScript-Code seltsam?

Haben Sie jemals so etwas in TypeScript geschrieben:

const direction = 'left';// ... und dann sagte TypeScript, es sei ein string, kein 'left'?

Kommt Ihnen bekannt vor? Das ist eine der häufigsten Fallen, in die selbst erfahrene Entwickler tappen. Heute analysieren wir ein mächtiges Werkzeug, das dieses Problem ein für alle Mal löst – as const.

Das Thema dieses Artikels basiert auf einer echten Frage auf Stack Overflow, die tausende Aufrufe gesammelt hat: "What does the 'as const' mean in TypeScript and what is its use case?". Wir passen diese Frage für Bildungsinhalte an, fügen lebendige Beispiele hinzu und zeigen, wie as const in TypeScript hilft, dumme Fehler zu vermeiden.

Bereit? Los geht's!






Was ist as const in TypeScript in einfachen Worten?

as const ist eine spezielle Konstruktion (const assertion), die TypeScript sagt: „Hey, erweitere den Typ nicht! Friere diesen Wert als Literal ein.“ Mit anderen Worten: Sie verbieten TypeScript, einen allgemeineren Typ abzuleiten (z. B. string), und zwingen es, den genauen Wert zu verwenden.



Das Problem ohne as const

Schauen Sie sich ein einfaches Beispiel an:

// Ohne as constconst role = 'admin'; // TypeScript leitet Typ ab: 'admin' (wegen const)let userRole = 'admin'; // TypeScript leitet Typ ab: string (wegen let)

// Und jetzt ein Array:const roles = ['admin', 'user', 'guest']; // TypeScript leitet ab: string[]

Wenn Sie let oder ein Array verwenden, „erweitert“ TypeScript den Typ zu einem allgemeineren. Das ist logisch: Eine Variable kann sich ändern, ein Array kann mutieren. Aber in 90 % der Fälle brauchen Sie genau den genauen Wert!



Die Lösung mit as const

const roles = ['admin', 'user', 'guest'] as const;// TypeScript leitet ab: readonly ["admin", "user", "guest"]

const config = { api: 'https://api.example.com', timeout: 5000} as const;// TypeScript leitet ab:// {// readonly api: "https://api.example.com";// readonly timeout: 5000;// }

Jetzt kennt TypeScript die genauen Literale. Kein string oder number – nur konkrete Werte. Das ist die Magie von as const in TypeScript.






Top-5-Fehler bei der Arbeit mit as const (und wie man sie vermeidet)

Selbst wenn man weiß, was as const ist, machen Entwickler oft dieselben Fehler. Lassen Sie uns sie anhand realer Fälle analysieren.



Fehler Nr. 1: Versuch, ein readonly-Objekt zu ändern

Wenn Sie as const verwenden, werden das Objekt oder Array readonly. Der Versuch, sie zu ändern, führt zu einem Kompilierungsfehler.

Schlecht:

const colors = ['red', 'green', 'blue'] as const;colors.push('yellow'); // Fehler! Property 'push' does not exist on type 'readonly [...]'

Wie vermeiden:

Wenn Sie ein mutierbares Array benötigen, verwenden Sie kein as const. Oder verwenden Sie eine Kopie:

const colors = ['red', 'green', 'blue'] as const;const mutableColors = [...colors]; // Jetzt ist es ein normales ArraymutableColors.push('yellow'); // Funktioniert


Fehler Nr. 2: Verschachtelte Objekte vergessen

as const arbeitet rekursiv – es macht alle verschachtelten Eigenschaften readonly. Viele vergessen das.

Beispiel:

const theme = {  colors: {    primary: '#007bff',    secondary: '#6c757d'  }} as const;

theme.colors.primary = '#000'; // Fehler! Cannot assign to 'primary' because it is a read-only property.

Wie vermeiden:

Wenn Sie nur einen Teil des Objekts ändern müssen, machen Sie ein oberflächliches as const oder verwenden Sie partielle Typen.



Fehler Nr. 3: Vergleich mit und ohne as const

Manchmal verwechseln Entwickler das Verhalten

Blogs

Buchempfehlungen