Typescript zur Applikationsentwicklung nutzen. Hier werden die wichtigsten Features der Sprache kurz vorgestellt und am konkreten Beispiel deren Einsatz gezeigt.
var myString: string;
myString = 4;
console.log(myString);
tsc index.ts
test.ts(3,1): error TS2322: Type 'number' is
not assignable to type 'string'.
Das Script funktioniert aber trotzdem.
var myVar = 'Hello World';
myVar = function () {
return myVar;
};
console.log(myVar());
[Function]
var myVar: string = 'Hello World';
myVar = function () {
return myVar;
};
console.log(myVar());
test.ts(2,1): error TS2322: Type '() => string' is not assignable to
type 'string'.
test.ts(6,13): error TS2349: Cannot invoke an expression whose type
lacks a call signature.
Array
var arr: number[] = [1, 2, 3];
var arr2: Array<number> = [1, 2, 3];
var arr: (string|number)[] = [];
arr.push(1);
arr.push('Hello');
Arrays mit verschiedenen Typen? Union Types!
Enum
Mengen von Ganzzahlen mit verständlichen Namen.
enum Food {Burger, Pizza, Schnitzel}
console.log(Food.Pizza); // 1
if (2 === Food.Schnitzel) { console.log('yummy!')} // yummy!
Any
Der Standardtyp, der alle anderen Typen beinhaltet. Erleichtert
den Umstieg von bestehendem JavaScript auf Typescript
erheblich.
function add(a: number, b: number): number {
return a + b;
}
add(1, 2);
add();
error TS2346: Supplied parameters do not match any signature of call
target.
add(1);
error TS2346: Supplied parameters do not match any signature of call
target.
add(1, 2, 3);
error TS2346: Supplied parameters do not match any signature of call
target.
add('Hello', 'World');
TS2345: Argument of type 'string' is not assignable to parameter of
type 'number'.
var x = 3; // var x: number = 3;
function add(a: number, b: number) {
if (a % 2 === 0) {
return a + b;
}
return 'Hello';
}
TS2354: No best common type exists among return expressions.
class Rectangle {}
var rect: Rectangle;
rect = new Rectangle();
Klassendefinition
Instanziierung
Variablendeklaration
var Rectangle = (function () {
function Rectangle() {
}
Rectangle.prototype.getHeight = function () {
return this.height;
};
return Rectangle;
})();
Ein Beispiel für eine kompilierte Typescript-Klasse:
Konstruktor
class Rectangle {
height: number;
width: number;
constructor(height: number, width: number) {
this.height = height;
this.width = width;
}
}
var rect: Rectangle;
rect = new Rectangle(20, 40);
Konstruktor - Shortcut
class Rectangle {
constructor(public height: number, public width: number) {
}
}
var rect: Rectangle;
rect = new Rectangle(20, 40);
class Square extends Rectangle {
constructor(side: number) {
super(side, side);
}
}
var square = new Square(20);
extends-Schlüsselwort
super für den Zugriff auf Parent
Interfaces
Definieren die Mindestanforderung an die Struktur eines
Typs. Interfaces können anonym oder benannt verwendet
werden und kommen sowohl für Klassen als auch Funktionen
zum Einsatz. Interfaces können andere Interfaces erweitern.
Module
Namespacing für Applikationen, um Namenskonflikte zu
vermeiden. Definition von Abhängigkeiten im Quellcode. Zwei
Varianten von Modulen: interne und externe.
Interne Module
module Shapes {
export class Rectangle {
constructor(public height: number, public width: number) {}
}
}
var rect = new Shapes.Rectangle(15, 20);
console.log(rect);
Interne Module
tsc --out sample.js index.ts
index.ts
/// <reference path="shape.ts" />
var rect = new Shapes.Rectangle(15, 20);
console.log(rect);
module Shapes {
export class Rectangle {
constructor(public height: number, public width: number) {}
}
}
shape.ts
Externe Module
Können mit anderen Modulloadern wie require.js oder dem
Node.js-Modulsystem verwendet werden.
Externe Module benötigen mindestens ein Toplevel export
oder import.
Kommandozeilenoption —module für den Compiler.
Mögliche Werte sind commonjs (Node.js) und amd
(require.js).
Externe Module
import shape = require('shape');
var rect = new shape.Rectangle(30, 40);
console.log(rect);
index.ts
export class Rectangle {
constructor(public height: number, public width: number) {}
}
shape.ts
tsc --module commonjs index.ts