Menü
Developer

Programmiersprachen: TypeScript 3.2 bringt strikte Typprüfung für gebundene Funktionen

Das aktuelle Release bietet zudem Object Spread und Rest für Generics und einen Typ für beliebig große Ganzzahlwerte.

Von
vorlesen Drucken Kommentare lesen 13 Beiträge
TypeScript 3.2 bringt strikte Typprüfung für gebundene Funktionen

(Bild: Pixabay)

Microsoft hat TypeScript 3.2 veröffentlicht und dem JavaScript-Aufsatz dabei unter anderem eine strikte Typprüfung für die Methoden bind, call und apply spendiert, der allerdings einen kleinen Umweg erfordert. Außerdem gibt es Object Spread zum Erweitern und Object Rest zum Entfernen von Properties nun auch für generische Typen.

Das Compiler-Flag --strictBindCallApply ermöglicht die strikte Typprüfung für die Methoden bind, call und apply. TypeScript führt dazu die beiden neuen Typen CallableFunction und NewableFunction, in lib.d.ts ein. Die Namen sprechen dabei mehr oder weniger für sich: Erstere Funktionen sind reguläre, aufrufbare Funktionen und letztere sind Konstruktoren. Potenziell kann die neue Prüfung im --strict-Mode zu zusätzlichen Fehlermeldungen führen, die ältere TypeScript-Varianten nicht angezeigt haben.

Object Spread und Object Rest existieren in JavaScript seit ES2015 zum Erweitern beziehungsweise Reduzieren der Properties eines Objekts. TypeScript bietet die Option zwar auch, bisher aber nicht für generische Typen. Für Object Spread ließ sich der Rückgabetyp nicht festlegen, da es schlicht keine Syntax dafür gab, wie zwei unbekannte Typen zu einem neuen erweitert werden.

Das Entfernen von Properties für Object Rest geschieht für generische Typen mit den Helfertypen Pick und Exclude in lib.d.ts. Folgendes Codebeispiel, das wie die weiteren aus der TypeScript-Dokumentation stammt, entfernt das tag-Property aus taggedPoint, sodass für point lediglich x und y verbleiben:

function excludeTag<T extends { tag: string }>(obj: T) {
let { tag, ...rest } = obj;
return rest; // Pick<T, Exclude<keyof T, "tag">>
}

const taggedPoint = { x: 10, y: 20, tag: "point" };
const point = excludeTag(taggedPoint); //{ x: number, y: number }

Der kommenden JavaScript-Standard ES 2019 soll mit BigInt einen neuen Typ für beliebig große Ganzzahlwerte erhalten. TypeScript 3.2 bringt dafür sowohl eine Typprüfung als auch die Ausgabe von BigInt-Literalen, also Ganzzahlen mit einem n im direkten Anschluss wie 100n – Voraussetzung dafür ist, dass esnext für das jeweils kommenden ECMAScript als Compilerziel gesetzt ist.

Gleichzeitig führt TypeScript 3.2 den Typ bigint ein, deren Zuweisung wahlweise über die BigInt-Funktion oder die oben genannten Literale erfolgt:

let foo: bigint = BigInt(100); // Zuweisung über die Funktion
let bar: bigint = 100n; // Direkte Zuweisung über
// ein BigInt-Literal

Der bigint-Typ lässt sich nicht direkt zusammen mit dem number-Typ verwenden. Die gegenseitige Zuweisung ist nicht erlaubt, und für arithmetische Operationen müssen Entwickler explizit die number-Werte mit der BigInt-Funktion umwandeln:

console.log(3.141592 * 10000n);     // Fehler
console.log(3145 * 10n); // Fehler
console.log(BigInt(3145) * 10n); // OK

Weitere Neuerungen in TypeScript 3.2 wie die verbesserten Fehlermeldungen lassen sich der offiziellen Ankündigung entnehmen. Entwickler können das aktuelle Release wie gewohnt mit dem Paketmanager npm über npm install -g typescript installieren. Wer die Nightly Builds des Entwicklerteams verwenden möchte, kann sie über npm install -g typescript@next beziehen. Der Sourcecode von TypeScript findet sich im GitHub-Repository. (rme)