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.
![](https://heise.cloudimg.io/width/610/q85.png-lossy-85.webp-lossy-85.foil1/_www-heise-de_/imgs/18/3/3/6/0/7/3/3/shutterstock_1463449130.jpg-5e8ee93f85818c01.jpeg)
(Bild: Trismegist san/Shutterstock.com)
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.
Segen und Fluch zugleich
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.
(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{
...
}
Vorschlag vor dem offiziellen Vorschlag
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.
Mehr als nur der richtige Typ
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.
(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.
Typen in Fremdsprachen
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.
Lesen Sie auch
Explizite Typangaben in Python: Segen oder Fluch?
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)