Menu

TypeScript Typen: string, number, boolean und mehr

Die eingebauten Typen von TypeScript: string, number, boolean, bigint, symbol, null und undefined, dazu Arrays und Objekte im Überblick. Wie man eine Typannotation schreibt, warum es keinen Integer-Typ gibt und warum man string statt String schreibt.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

TypeScript-Typen beschreiben, welche Art von Wert eine Variable enthalten darf. Du schreibst den Typ hinter einen Doppelpunkt, let name: string, und der Compiler lehnt jeden Code ab, der dort die falsche Art von Wert ablegt. Die Grundtypen sind die sieben primitiven Typen von JavaScript plus Objekttypen für Arrays und Objekte.

Die Annotationen werden beim Kompilieren geprüft und danach entfernt. Das Programm, das läuft, ist reines JavaScript.

Die primitiven Typen

TypBeispielwerteHinweise
string"hi", 'hi', `hi ${name}`Text. Alle drei Anführungszeichen-Stile haben denselben Typ.
number42, 3.14, -0.5, NaN, InfinityJede Zahl, ganz oder nicht. Es gibt kein int oder float.
booleantrue, falseNur diese zwei Werte.
bigint10n, BigInt(10)Ganze Zahlen beliebiger Größe. Braucht Target ES2020 oder neuer.
symbolSymbol("id")Ein eindeutiger Wert, meist als Objektschlüssel verwendet.
nullnull„Absichtlich leer“.
undefinedundefined„Nicht gesetzt“. Auch das, was eine fehlende Eigenschaft liefert.

Die Typnamen sind kleingeschrieben. typeof liefert zur Laufzeit für die meisten davon dieselben Wörter, daher prüfst du mit typeof x === "number" den primitiven Typ eines Werts, während das Programm läuft.

Typannotationen

Eine Annotation ist : Type hinter einer Variablen, einem Parameter oder der Parameterliste einer Funktion. Am wichtigsten sind Annotationen bei Parametern, denn TypeScript kann nicht erraten, was ein Aufrufer übergibt.

Wird eine Variable in derselben Zeile initialisiert, ist die Annotation meist überflüssig: let count = 10 hat bereits den Typ number. Die Regeln dafür, wann man Typen weglassen kann, stehen auf der Seite zur Typinferenz.

Ein falscher Typ ist ein Compilerfehler

Weist du einen Wert des falschen Typs zu, bricht der Compiler ab, bevor irgendetwas läuft:

Der Compiler gibt aus:

index.ts(3,1): error TS2322: Type 'string' is not assignable to type 'number'.

Die Lösung ist, den Wert umzuwandeln, port = Number("3000"), oder die Annotation zu ändern, falls die Variable wirklich Text enthalten soll.

number: Es gibt keinen Integer-Typ

JavaScript speichert jede Zahl als 64-Bit-Gleitkommawert, deshalb hat TypeScript einen einzigen Typ number. Ganze Zahlen sind bis Number.MAX_SAFE_INTEGER (2 ** 53 - 1) exakt. Darüber hinaus nimmst du bigint.

bigint und number lassen sich nicht mischen: exact + 1 ist ein Compilerfehler (TS2365: Operator '+' cannot be applied to types 'bigint' and '1'., wobei '1' der Literaltyp der 1 ist) und wäre, falls es je liefe, zur Laufzeit auch ein TypeError. Wandle eine Seite ausdrücklich mit BigInt(1) oder Number(exact) um, wobei Number Werte außerhalb des sicheren Bereichs rundet.

Einen Typ, der nur ganze Zahlen akzeptiert, kann TypeScript für beliebige Werte nicht ausdrücken. Prüfe mit Number.isInteger an der Stelle, an der der Wert in dein Programm kommt.

boolean

boolean hat genau zwei Werte, true und false. Werte, die nur truthy sind (1, "yes"), sind keine Booleans. Mach mit Boolean(x) oder x !== 0 einen daraus.

null und undefined

Mit strict (seit TypeScript 6.0 der Standard) sind null und undefined eigene Typen und gehören nicht zu string, number oder einem anderen Typ. Eine Variable, die leer sein kann, sagt das mit einer Union:

Eine Eigenschaft eines Werts zu lesen, der undefined sein könnte, ist ein Compilerfehler, bis du ihn prüfst. Die Seite zu null und undefined behandelt die Prüfungen, ?. und ??.

Arrays und Objekte im Überblick

Alles, was kein primitiver Wert ist, hat einen Objekttyp. Die drei Formen, die dir zuerst begegnen:

let tags: string[] = ["ts", "js"];               // array of strings
let point: { x: number; y: number } = { x: 1, y: 2 }; // object with two number properties
let greet: (name: string) => string = (n) => `hi ${n}`; // function type

Jede davon hat eine eigene Seite: Arrays, Tupel (Arrays fester Länge), Objekttypen und Funktionstypen.

string, number, boolean vs String, Number, Boolean

Die großgeschriebenen Namen sind die Typen der Wrapper-Objekte von JavaScript (new String("x")), nicht die gewöhnlicher Werte. Annotiere mit den kleingeschriebenen Namen.

index.ts(3,7): error TS2322: Type 'String' is not assignable to type 'string'.
  'string' is a primitive, but 'String' is a wrapper object. Prefer using 'string' when possible.

Ändere in der ersten Zeile String zu string, und der Block läuft. Dasselbe gilt für Number, Boolean, Symbol und BigInt. (Object ist ein anderer Fall: Es akzeptiert fast jeden Wert, primitive eingeschlossen; siehe Objekttypen.)

Weitere eingebaute Typen

Ein paar weitere Typen tauchen früh auf. Jeder hat eine eigene Seite.

TypBedeutung
anySchaltet die Prüfung für diesen Wert ab. Vermeide ihn.
unknownEin beliebiger Wert, den du aber vor der Verwendung prüfen musst.
voidEine Funktion gibt nichts Brauchbares zurück.
neverÜberhaupt kein Wert: eine Funktion, die immer wirft, oder ein unmöglicher Fall.
objectJeder nicht primitive Wert.
"red" | "green"Ein Literaltyp: nur genau diese Werte.

Häufig gestellte Fragen

Hat TypeScript einen Integer-Typ?

Nein. number deckt ganze Zahlen und Dezimalzahlen gleichermaßen ab, weil JavaScript jede Zahl als 64-Bit-Gleitkommawert speichert. Ob eine Zahl ganzzahlig ist, prüfst du zur Laufzeit mit Number.isInteger(n), und für ganze Zahlen größer als Number.MAX_SAFE_INTEGER (2 ** 53 - 1) ohne Genauigkeitsverlust nimmst du bigint (10n).

Was ist der Unterschied zwischen string und String in TypeScript?

string ist der primitive Typ, den String-Literale und Template-Strings haben. String ist der Typ des Wrapper-Objekts, das new String("x") erzeugt. Annotiere immer mit den kleingeschriebenen string, number und boolean; einen String einem string zuzuweisen ist ein Compilerfehler (TS2322).

Welche primitiven Typen gibt es in TypeScript?

Dieselben sieben wie in JavaScript: string, number, boolean, bigint, symbol, null und undefined. Alles andere (Arrays, Objekte, Funktionen, Klasseninstanzen) ist ein Objekttyp.

Wie deklariert man in TypeScript eine Variable mit Typ?

Setze einen Doppelpunkt und den Typ hinter den Namen: let count: number = 0;. Bei einer Funktion annotierst du jeden Parameter und optional den Rückgabetyp: function add(a: number, b: number): number. Wird eine Variable direkt initialisiert, kannst du die Annotation meist weglassen und TypeScript den Typ ableiten lassen.

Existieren TypeScript-Typen zur Laufzeit?

Nein. Der Compiler prüft die Typen und entfernt sie danach, das ausgeführte JavaScript enthält also keine Annotationen. Zur Laufzeit prüfst du Werte mit JavaScript-Operatoren wie typeof, Array.isArray und instanceof.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S