© istockphoto.com/Sergey Niven, © S&S Media
TypeScript auf dem Vormarsch zur Serverentwicklung mit Node.js

Node.ts - Mit Typen? Aber sicher!


Stellen Sie sich vor, Sie könnten eine leichtgewichtige dynamische Programmiersprache mit allen Vorteilen der statischen Codeanalyse – Refactoring und Codevervollständigung – zur Cross-Plattform-Serverentwicklung nutzen. Wenn wir dann noch in der Lage sind, Teile des Codes auch für die Cross-Plattform-Frontend-Entwicklung zu nutzen, haben wir den perfekten Partner gefunden. Klingt gut? Willkommen in der Welt von Node.js – aber mit TypeScript.

TypeScript [1] ist keine eigene Programmiersprache, sondern ein Superset von JavaScript, welches zu JavaScript kompiliert wird. Das heißt, jedes gültige JavaScript ist auch gültiges TypeScript. In TypeScript können wir, wie der Name schon sagt, JavaScript um die Angabe von Typen erweitern und Typsicherheit erlangen – aber ohne die Dynamik von JavaScript als solche zu verlieren. Für große Serversoftware ist dies ein enormer Vorteil. Durch statisch typisierten Code können wir statische Analysen durchführen und somit umfangreiches Wissen über den Code berechnen. Ein Traum für Refactoring und Codevervollständigung. Übrigens, TypeScript wird von Microsoft entwickelt und von Anders Hejlsberg designt. Selbiger hat auch die Sprache C# entworfen. Java- und vor allem .NET-Entwickler können sich sehr schnell zurechtfinden und auf bekannte Sprachfeatures stoßen.

Bevor wir mit TypeScript starten können, benötigen wir zwei Voraussetzungen. Die erste ist Node.js, unsere Server-JavaScript-Runtime. Die zweite ist ein Editor, der die Features von TypeScript durch statische Codeanalyse nutzen kann. Hier sind Editoren wie Visual Studio Code oder WebStorm zu nennen. Natürlich können wir Type­Script mit jedem beliebigen Texteditor schreiben, wenn wir dabei auf die Vorteile der Codeanalyse verzichten. Da WebStorm nach Ansicht des Autors aktuell den besseren Support für TypeScript hat, werden wir im Rahmen des Artikels damit arbeiten. Gemeinsamen werden wir ein kleines HTTP-API entwickeln, um Produkte zu verwalten. Ein Produkt wird aus einem Namen und einem Preis bestehen. Die folgenden Routen werden implementiert:

  • GET/products: Gibt eine Liste von Produkten zurück.

  • POST/products: Legt ein neues Produkt an.

Das fertige Projekt ist auf GitHub [2] zu finden.

Installation der Abhängigkeiten

Nachdem wir Node.js [3] installiert haben, legen wir zuerst einen Ordner productApi an, in dem wir all unsere Sourcen ablegen werden. In diesem Ordner führen wir das folgende Kommando auf der Kommandozeile aus:

npm init -y

Damit erstellen wir eine package.json-Datei mit ihren Standardeinträgen. Der nächste Schritt ist das Installieren aller nötigen Abhängigkeiten. Die folgenden Kommandos werden nacheinander in der Kommandozeile ausgeführt:

npm i --save-dev typescript tslint typings mocha chai istanbul remap-istanbul npm i --save restify

Schauen wir uns zunächst an, welche Abhängigkeiten hier installiert werden. Im ersten Kommando werden alle Entwicklungsabhängigkeiten installiert:

  • typescript: Entsprechend dem Namen ist hier der Compiler für TypeScript (TSC) enthalten.

  • tslint: Ein Tool [4] zum Prüfen von TypeScript-Dateien auf Einhaltung bestimmter Regeln, bspw. für die Codeformatierung oder -styling.

  • typings: Ein Tool [5] zum Installieren von Typendefinitionen von Drittanbieterbibliotheken.

  • mocha: Ein Testframework [6] für Node.js.

  • chai: Eine Assertion-Bibliothek [7] zur Überprüfung, ob Variablen oder Objekte bestimmte Kriterien erfüllen, sodass der Unit-Test bestanden wird.

  • istanbul: Ein Tool [8] zur Berechnung der Code Coverage und zum Erstellen von Reporten bspw. im HTML-Format.

  • remap-istanbul: Da istanbul die Code Coverage auf JavaScript-Sourcen berechnet, wird remap-istanbul [9] benötigt, um im Coverage-Report die TypeScript- anstelle der JavaScript-Sourcen anzuzeigen.

Das zweite Kommando installiert die Abhängigkeiten für unser HTTP-API. Hierbei handelt es sich um restify [10], einem Framework zur Erstellung von HTTP-­basierten APIs. Im einfachsten Fall mappt es eine HTTP-Route auf eine Funktion, die beim Request aufgerufen wird.

Damit sind alle notwendigen Abhängigkeiten installiert und wir sind startklar für die Entwicklung von Node.js mit TypeScript – Node.ts eben.

Die ersten Schritte mit Node.ts

Im Ordner productsApi erstellen wir einen weiteren Ordner mit dem Namen src. Hier werden wir all unsere Type­Script-Dateien ablegen. Starten wir zuerst mit der index.ts-Datei. Sie wird später als Start-up von unserem Server dienen. Der Inhalt der Datei ist unter Listing 1 zu finden.

Listing 1: „src/index.ts“

import {Server} from './server'; const server = new Server(8080); server.start();

Wir nutzen hier das ECMAScript-6-(ES6-)Modulformat, um weiteren Quelltext zu importieren. Ähnlich wie bei require() von Node.js ist, dass wir beim from-Teil entweder relative Pfadangaben machen können (wie in Listing 1 zu sehen) oder Paketnamen, wie sie in node_modules zu finden sind. Auch hier werden die Dateiendungen nicht hinzugefügt.

Der nächste Schritt ist das Anlegen der Datei server.ts. Der Inhalt ist in Listing 2 zu finden.

Listing 2: „src/server.ts“

import {productController} from './productController'; import restify = require('restify'); export class Server { private server: restify.Server; private port: number; constructor(port: number) { this.server = restify.createServer({ name: 'Sample Server' }); this.server.use(restify.bodyParser...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang