Softwareentwicklung

Was JavaScript von TypeScript unterscheidet

12.04.2023
Von  und
Martin Heller schreibt als freier Autor für die Schwesterpublikation InfoWorld.


Florian Maier beschäftigt sich mit diversen Themen rund um Technologie und Management.
JavaScript ist eine der gängigsten Programmiersprachen, aber nicht für jede Art von Applikation geeignet. Wir sagen Ihnen, wann Sie mit TypeScript besser fahren.
JavaScript vs. TypeScript: Wo die Unterschiede zwischen den Coding-Sprachen liegen, erfahren Sie hier.
JavaScript vs. TypeScript: Wo die Unterschiede zwischen den Coding-Sprachen liegen, erfahren Sie hier.
Foto: k-mookpan - shutterstock.com

Das Internet läuft im Grunde auf Basis von JavaScript, HTML und CSS. Unglücklicherweise eignet sich JavaScript jedoch nicht für die Entwicklung umfangreicher Anwendungen. An dieser Stelle kommt TypeScript ins Spiel: die Coding-Sprache ist mit JavaScript kompatibel und ermöglicht auch die Entwicklung sehr umfangreicher Applikationen.

Wir haben die wesentlichen Fakten zu JavaScript und TypeScript zusammengefasst und sagen Ihnen, wo die Unterschiede liegen.

Was ist JavaScript?

JavaScript wurde als Programmiersprache für den altehrwürdigen Netscape Navigator geboren. Brendan Eich erstellte 1995 den Prototypen für die Programmiersprache - in einem Zeitraum von zehn Tagen. Wie Eich 2008 im Interview mit den US-Kollegen von Infoworld preisgab, hieß JavaScript zunächst "Mocha", dann "LiveScript" und wurde schließlich im Dezember 1995 nach einer LIzenzierungsvereinbarung zwischen Netscape und Sun Microsystems JavaScript getauft. Die Nomenklatur-Ähnlichkeiten zwischen Java und JavaScript haben in der Vergangenheit bereits vielfach zu Missverständnissen und Verwechslungen geführt, obwohl es zwischen Java und JavaScript eklatante Unterschiede gibt. JavaScript hat sich über die Jahre erheblich weiterentwickelt und wird inzwischen von allen modernen Webbrowsern unterstützt.

Auf die Einführung von JavaScript für den Netscape Navigator folgte relativ zügig eine Variante für Netscape Enterprise Server und Microsoft IIS. Circa 13 Jahre später stellte Ryan Dahl schließlich mit Node.js eine quelloffene, plattformübergreifende Laufzeitumgebung für JavaScript vor, die unabhängig von Browser- oder Server-Variante funktioniert.

Coding mit JavaScript

JavaScript ist eine Programmiersprache mit vielen Paradigmen: Sie nutzt geschwungene Klammern und Strichpunkte - ähnlich wie die C-Sprachenfamilie. Sie weist eine schwache, dynamische Typisierung auf und wird entweder interpretiert oder just-in-time kompiliert. Ganz allgemein ist JavaScript Single-Thread-fähig - es gibt allerdings eine Web Workers API, die Multithreading ermöglicht. Darüber hinaus gibt es 'events', 'asynchronous function calls' und 'callbacks'.

JavaScript unterstützt objektorientierte Softwareentwicklung mit Prototypen - im Gegensatz zu der bei C++, Java und C# verwendeten 'class syntax'. Allerdings ist diese seit 2015 mit dem Release von JavaScript ES6 ebenfalls an Bord. Außerdem unterstützt JavaScript auch die funktionale Programmierung - inklusive 'closures', 'recursion' und 'lambdas' (anonyme Funktionen).

Vor JavaScript ES6 gab es keine Tail-Call-Optimierung - inzwischen ist das bei Aktivierung des 'strict modes' ('use strict') möglich. Die Implementierung ist je nach Browser unterschiedlich. Der 'strict mode' verändert dabei die Semantik von JavaScript und sorgt dafür, dass manche 'silent errors' zu 'throw errors' werden.

Das JavaScript-Ökosystem

Es gibt zahlreiche JavaScript APIs - einige werden von Browsern bereitgestellt, bei anderen handelt es sich um Third-Party-Schnittstellen. Dabei gibt es unterschiedliche APIs für Clients, Server, Desktops und solche, die mehrere verschiedene Umgebungen unterstützen. Zu den Browser-Schnittstellen von JavaScript gehören:

APIs von Drittanbietern sind im Überfluss vorhanden, von Interfaces bis hin zu kompletten Applikationen wie Google Maps. Bei anderen handelt es sich um Utilities, etwa um die Softwareentwicklung mit JavaScript, HTML5 und CSS einfacher zu gestalten (jQuery). Auch Applikations-Frameworks für spezielle Zwecke stehen zur Verfügung: Express ermöglicht beispielsweise die Entwicklung von Web- und Mobile-Applikations-Servern in Node.js.

Es gibt eine Vielzahl weiterer JavaScript-Module - insgesamt über 300.000 verschiedene. Um der schieren Zahl Herr werden zu können, empfiehlt sich der Einsatz eines 'package managers' wie npm (Standard für Node.js). Eine Alternative dazu stellt beispielsweise das von Facebook entwickelte yarn dar. Weitere Tools in ähnlichem Stil sind unter anderem Bower oder jspm.

Webpack hingegen bündelt JavaScript-Module zu statischen Browser Assets und Browserify erlaubt Softwareentwicklern Module im Node.js-Stil zu schreiben, die für die Nutzung im Browser kompiliert werden. Grunt hingegen ist ein File-orientierter JavaScript 'task runner' - ebenso wie gulp (das auch ein 'streaming build system' ist).

Um dafür zu sorgen, dass der JavaScript Code ohne Kompilierung zuverlässig läuft, kommen 'linter' zum Einsatz. Dieser Begriff gründet auf dem Lint Tool der C-Programmiersprachen - einst ein Standard-Werkzeug für Unix. Zu den JavaScript-'lintern' gehören:

Diese lassen sich mit Hilfe eines 'task runners' oder einer IDE bei Änderungen am Programmcode automatisieren.

'Transpiler' kommen zum Einsatz, um andere Programmiersprachen wie CoffeeScript oder TypeScript in JavaScript zu übersetzen - oder auch, um modernen JavaScript Code (beispielsweise ES2015) zu simplifizieren, so dass er in (fast) jedem Browser läuft. Der gängigste Transpiler für modernes JavaScript ist Babel.

Was ist TypeScript?

TypeScript stellt eine typisierte Überkategorie von JavaScript dar, die sich in 'plain' JavaScript kompilieren lässt. Der quelloffene TypeScript Compiler lässt sich als Node.js-Paket installieren. Folgende Entwicklungsumgebungen unterstützen TypeScript:

  • Visual Studio 2017

  • Visual Studio 2019

  • Visual Studio 2022

  • Visual Studio Code

  • WebStorm

  • Sublime Text

  • Atom

  • Eclipse

  • Emacs

  • Vim

TypeScript fügt optionale Typen, Klassen und Module zu JavaScript hinzu und unterstützt Tools für JavaScript-Applikationen mit einer Vielzahl an Code-Zeilen. Browser, Host oder Betriebssystem spielen dabei keine Rolle. Softwareentwickler haben durch den Einsatz von 'types' die Möglichkeit, hochproduktive Entwicklungs-Tools und -Methoden wie 'static checking' oder 'code refactoring' bei der Entwicklung von JavaScript-Applikationen zum Einsatz zu bringen.

Diese 'types' sind optional, können aber mit wenigen Anmerkungen einen großen Unterschied machen, wenn es um 'static verification' des Programmcodes geht. Darüber hinaus können mit 'types' auch Interfaces zwischen Softwarekomponenten definiert und Einblicke in das Verhalten existierender JavaScript-Bibliotheken gewonnen werden. Um möglichst robuste Softwarekomponenten zu erzeugen, unterstützt TypeScript die neuesten JavaScript Features.

Softwareentwicklung mit TypeScript

TypeScript akzeptiert JavaScript, bietet aber zusätzliche Möglichkeiten: 'type annotations' und 'type checking' hinsichtlich der Kompilierungs-Zeit, -Klassen und -Modulen. Das ist äußerst nützlich, wenn die Software möglichst zuverlässig laufen soll. Einfaches JavaScript erzeugt Fehler nur in der Laufzeit - und auch nur dann, wenn ein fehlerbehafteter Pfad erreicht wird. Das Tutorial "TypeScript in 5 minutes" klärt über die Benefits auf, während "Migrating from JavaScript" einen detaillierten Einblick gewährt, wie sich ein existierendes JavaScript-Projekt upgraden lässt.

Weitere, interessante und aufschlussreiche Einblicke in die Arbeit mit TypeScript gibt der langjährige Microsoft-Entwickler Anders Hejlsberg:

Dieser Beitrag basiert auf einem Artikel unserer US-Schwesterpublikation Infoworld.com.