Programmiersprache: Microsoft möchte Typhinweise nach JavaScript bringen

Die Typsyntax soll rein optional sein und lediglich für die Entwicklungswerkzeuge, aber nicht für JavaScript-Engines gelten.

In Pocket speichern vorlesen Druckansicht 153 Kommentare lesen

(Bild: Trismegist san/Shutterstock.com)

Lesezeit: 3 Min.
Inhaltsverzeichnis

Microsoft hat einen offiziellen Vorschlag für eine Typsyntax in JavaScript veröffentlicht. Die neue Syntax soll eine Typisierung für Variablen und Parameter in die grundsätzlich untypisierte Programmiersprache einführen. Sie ist gradliniger und schlanker als die rein kommentarbasierte Syntax, die einige Entwicklerinnen und Entwickler derzeit in JavaScript nutzen. Dennoch soll sie vollständig optional und vor allem auf das Tooling, aber nicht auf die Engines ausgerichtet sein.

Mit TypeScript, das frisch in Version 4.6 erschienen ist, bietet Microsoft seit zehn Jahren eine Programmiersprache als Obermenge von JavaScript, die unter anderem auf Typisierung setzt, wie schon der Name nahelegt. Die fehlende Typisierung in JavaScript sehen einige aufgrund der Flexibilität und Einfachheit als Segen, während andere sie aufgrund des erhöhten Fehlerpotenzials als Fluch betrachten. In der jährlich durchgeführten Umfrage "State of JavaScript" führte die statische Typisierung in den letzten beiden Jahren die Liste der gewünschten Features an.

Der Survey zur JavaScript-Entwicklung zeigt einen breiten Wunsch nach statischer Typisierung.

(Bild: State of JS 2021)

Eine Behelfsfunktion bieten in JavaScript die Kommentare über JSDoc, die optionale Typvorgaben über @type für Variablen beziehungsweise @param und @returns für Funktionsaufrufe ermöglichen:

/**
 * @type {string}
 */
var s;

/**
 * @param {string} s1
 * @param {number} n1
 * @returns {string} 
 */
function doSomething(s1, n1) {
  ...
}

Die Kommentare haben keinen Einfluss auf den tatsächlichen Programmfluss, und JavaScript-Engines ignorieren von der Annotation abweichende Typzuweisungen. Allerdings werten Tools wie der TypeScript-Compiler sie aus, um eine Typüberprüfung durchzuführen.

Microsoft schlägt nun einen ähnlichen Ansatz mit einer schlankeren Syntax vor. Nach dem ersten Entwurf sähe obiger Code folgendermaßen aus:

let s: string;

function doSomething(s1: string, n1: number): string{
  ...
}

Der Vorschlag ist noch nicht offiziell bei dem ECMAScript-Standardkomitee TC39 eingereicht, sondern Microsoft hat ihn als Stage 0 Proposal auf GitHub veröffentlicht und möchte ihn in Kürze beim Komitee einreichen.

Wie bei den JSDoc-Kommentaren soll die Typsyntax rein optional sein. JavaScript-Engines und damit die Browser sollen sie ignorieren. Tools wie TypeScript oder Flow können sie jedoch nutzen, um vor Typisierungsfehlern zu warnen. Auch Entwicklungsumgebungen und Codeeditoren sollen die Syntax nutzen, um direkt auf falsch typisierte Parameter oder Variablen hinzuweisen.

Der Vorschlag zielt unter anderem auf diejenigen Entwickler, die TypeScript statt JavaScript in erster Linie wegen der Typisierung verwenden. Sie sparen sich damit den zusätzlichen Entwicklungsschritt des Übersetzens von TypeScript- in JavaScript-Code.

Durch die Typsyntax soll der Zwischenschritt des Übersetzens von TypeScript in JavaScript entfallen.

(Bild: Microsoft)

Neben den Typannotationen schlägt Microsoft zusätzlich ? als Auszeichnung für optionale Parameter beziehungsweise Klasseninhalte und Type-Assertions über as und ! vor. Mittelfristig sind auch die Zugriffsmodifikatoren public, private und protected denkbar.

Durch die weitgehend von TypeScript übernommene Syntax soll der Einsatz der Typhinweise für JavaScript- und TypeScript-Entwickler gleichermaßen attraktiv sein.

JavaScript wäre nicht die erste von Haus aus nicht typisierte Sprache, die später eine Typsyntax erhält. Python kennt Type Hints seit Version 3.6. PHP hat das Typsystem schrittweise ausgebaut, mit ersten Type Hints in Version 5 und maßgeblichen Ergänzungen in PHP 7.2 und PHP 7.4.

Weitere Details lassen sich dem Developer-Blog von Microsoft entnehmen. Der Beitrag weist explizit darauf hin, dass es bei dem Vorschlag nicht darum geht, TypeScripts Typüberprüfung für jeden Browser und jede JavaScript-Laufzeitumgebung einzuführen, da das unweigerlich zu Problemen für die Kompatibilität und Performance führen würde. Microsoft möchte das Proposal offiziell bei dem kommenden TC39-Meeting im März einbringen. Der Standardisierungsprozess des Komitees sieht für alle Vorschläge vier Stufen vor.

(rme)