SlideShare une entreprise Scribd logo
1  sur  25
TypeScript
Ein Blick über den Tellerrand
DNUG Paderborn, 26. April 2016
Über den Vortragenden
 Jens Siebert
 Diplom-Informatiker
 Software-Architekt bei dSPACE (seit 2 Jahren)
 Vorher: SmartCards und Medizintechnik
Bild: privat (Jens Siebert, 2016)
Bevor wir uns TypeScript widmen…
Bild: Wikipedia (https://en.wikipedia.org/wiki/File:TeamTimeCar.com-BTTF_DeLorean_Time_Machine-OtoGodfrey.com-JMortonPhoto.com-07.jpg)
JavaScript – Ein Blick in die Geschichte
 Entwickelt bei Netscape durch Brendan Eich
 Entwicklungsdauer bis zur ersten Version: 10 Tage
 Beeinflusst durch Scheme, Perl, Self, Java, C, Python, etc.
 JavaScript 1.0 im März 1996
 Standardisierung durch ECMA in 1997 (ECMAScript)
 Aktueller Standard: ECMAScript 2015 (ES2015/ES6)
 Typische Anwendungsgebiete (initial):
 DOM-Manipulation
 Form-Validierung
Bild: Wikipedia (https://en.wikipedia.org/wiki/File:Brendan_Eich_Mozilla_Foundation_official_photo.jpg)
JavaScript - Features
 Interpretiert
 Funktional
 Dynamisch typisiert
var i = 5;
i = „Hallo Welt“;
 Objektorientiert (Prototyp-basierte Objektorientierung)
var hund = Object.create(tier);
hund.bellen = function() {
console.log("Wuff");
}
delete hund.bellen;
hund.bellen(); // Kabumm
 Keine (nativen) Mechanismen zur Strukturierung großer Software-Systeme
Aktuelle Anwendungsgebiete von
JavaScript
Erkenntnis: Wartbarkeit und Erweiterbarkeit
von JavaScript-Code skalieren nicht!
Bilder: Wikipedia
Fehlerkosten in der Software-
Entwicklung
Bild: OKTA, INC. (http://developer.okta.com/assets/img/2015-05-08-software-engineering-design-principles-agile-cost-curve.png)
Auftritt TypeScript
 Entwickelt bei Microsoft durch Anders Hejlsberg
 Beeinflusst durch JavaScript, Java, C#
 TypeScript 0.8 im Oktober 2012
 Aktuelle Version: TypeScript 1.8
Bild: Wikipedia (https://en.wikipedia.org/wiki/File:Anders_Hejlsberg.jpg)
TypeScript – Was ist das eigentlich?
 Superset von JavaScript/ECMAScript
 Features:
 Hochgradige Kompatibilität zu ECMAScript (ES3, ES5, ES2015)
 Übersetzung in „lesbaren“ JavaScript-Code
 Strenge Typisierung (optional)
 Mechanismen zur Strukturierung großer Software-Systeme
 u.a. Klassen, Interfaces, Generics, Module, …
 Minimale zusätzliche Laufzeit-Kosten
 Enge Anlehnung an aktuelle und zukünftige ECMAScript-Standards
 Services zur vereinfachten Integration in Entwicklungswerkzeuge
 Cross Platform und Open Source
TypeScript – Die Architektur
Bild: GitHub/Microsoft (https://raw.githubusercontent.com/wiki/Microsoft/TypeScript/images/architecture.png)
TypeScript Beispiele - Klassen
class Greeter {
greet() : string {
return "Hello World!";
}
}
var Greeter = (function () {
function Greeter() {
}
Greeter.prototype.greet =
function () {
return "Hello World!";
};
return Greeter;
}());
TypeScript Beispiele - Interfaces
interface IGreeter {
greet() : string;
}
class Greeter implements IGreeter {
greet() : string {
return "Hello World!";
}
}
var Greeter = (function () {
function Greeter() {
}
Greeter.prototype.greet =
function () {
return "Hello World!";
};
return Greeter;
}());
TypeScript Beispiele - Namespaces
namespace Greetings {
export interface IGreeter {
greet() : string;
}
export class Greeter implements IGreeter
{
greet() : string {
return "Hello World!";
}
}
}
var Greetings;
(function (Greetings) {
var Greeter = (function () {
function Greeter() {
}
Greeter.prototype.greet =
function () {
return "Hello World!";
};
return Greeter;
}());
Greetings.Greeter = Greeter;
})(Greetings || (Greetings = {}));
TypeScript Beispiele - Module
interface IGreeter {
greet() : string;
}
class Greeter implements IGreeter {
greet() : string {
return "Hello World!";
}
}
export { IGreeter, Greeter }
// AMD Module syntax
define(["require", "exports"], function
(require, exports) {
"use strict";
var Greeter = (function () {
function Greeter() {
}
Greeter.prototype.greet = function ()
{
return "Hello World!";
};
return Greeter;
}());
exports.Greeter = Greeter;
});
TypeScript Beispiele – async/await
async function main() {
await ping();
}
async function ping() {
for (var i = 0; i < 10; i++) {
await delay(300);
console.log(“ping”);
}
}
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) {
resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments)).next());
});
};
function main() {
return __awaiter(this, void 0, void 0, function* () {
yield ping();
});
}
function ping() {
return __awaiter(this, void 0, void 0, function* () {
for (var i = 0; i < 10; i++) {
yield delay(300);
console.log(ping);
}
});
}
TypeScript Beispiele – Singleton Pattern
class Greeter {
private static greeter : Greeter = null;
public static GetInstance() : Greeter {
if (this.greeter == null) {
this.greeter = new Greeter();
}
return this.greeter;
}
greet() : string {
return "Hello World!";
}
}
var Greeter = (function () {
function Greeter() {
}
Greeter.GetInstance = function () {
if (this.greeter == null) {
this.greeter = new Greeter();
}
return this.greeter;
};
Greeter.prototype.greet = function ()
{
return "Hello World!";
};
Greeter.greeter = null;
return Greeter;
}());
SOLID Prinzipien
 Eingeführt durch Robert C. Martin (Uncle Bob)
 Regeln für die Entwicklung von Software-Systemen, die einfach gewartet und
erweitert werden können.
 S – Single Responsibility Principle (SRP)
 a class should have only a single responsibility
 O – Open-Closed Principle (OCP)
 software entities … should be open for extension, but closed for modification
 L – Liskov Substitution Principle (LSP)
 objects in a program should be replaceable with instances of their subtypes without altering the
correctness of that program
 I – Interface Segregation Principle (ISP)
 many client-specific interfaces are better than one general-purpose interface
 D – Dependency Inversion Principle (DIP)
 one should “Depend upon Abstractions. Do not depend upon concretions”
Bild: Wikipedia (https://en.wikipedia.org/wiki/File:Robert_Cecil_Martin.png)
Liskov Substitution Principle [1]
interface IPersistenceService {
save(entity : any) : number
}
class CookiePersistenceService implements IPersistenceService {
save(entity : any) : number {
var id = …;
[…]
return id;
}
}
class LocalPersistenceService implements IPersistenceService {
save(entity : any) : number {
var id = …;
[…]
return id;
}
}
Liskov Substitution Principle [2]
class Favorites {
private _persistenceSerice : IPersistenceService;
constructor(persistenceService : IPersistenceService) {
this._persistenceSerice = persistenceService;
}
public setPersistenceService(persistenceService : IPersistenceService) {
this._persistenceService = persistenceService;
}
public saveFavorite(favorite : any) {
this._persistenceSerice.save(favorite);
}
}
var cookieFav = new Favorites(new CookiePersistenceService());
var localFav = new Favorites(new LocalPersistenceService());
cookieFav.setPersistenceService(new LocalPersistenceService());
Interface Segregation Principle
interface VehicleInterface {
getSpeed() : number;
getVehicleType() : number
isTaxPayed() : boolean;
isLightOn() : boolean;
isLightOff() : boolean;
startEngine() : void;
accelerate : number;
stopEngine() : void;
}
interface VehicleInterface {
getSpeed() : number;
getVehicleType() : number
isTaxPayed() : boolean;
}
interface LightInterface {
isLightOn() : boolean;
isLightOff() : boolean;
}
interface EngineInterface {
startEngine() : void;
accelerate : number;
stopEngine() : void;
}
Ausblick auf TypeScript 2.0
 Non-nullable types
 Readonly properties
 private and protected constructors
 abstract properties
 async/await support for ES5/ES3
 und noch vieles mehr…
Zusammenfassung
 TypeScript bietet…
 … strenge Typisierung
 … Mechanismen zur Strukturierung großer Software-Systeme
 … Kompatibilität zu bestehenden und zukünftigen ECMAScript-Standards
 TypeScript ermöglicht…
 … Prüfung der Software während der Implementierung
 … vereinfachte Integration in Entwicklungswerkzeuge
 … Anwendung bekannter und bewährter Prinzipien für die Entwicklung großer
Software-Systeme
Literatur-Tipps
Bilder:
Packt Publishing (https://www.packtpub.com/sites/default/files/5548OS_Learning%20TypeScript_.jpg)
Rheinwerk Verlag (https://s3-eu-west-1.amazonaws.com/cover2.galileo-press.de/print/9783836223799_800.png)
TypeScript Documentation: http://www.typescriptlang.org/docs/tutorial.html
TypeScript Playground: http://www.typescriptlang.org/play/index.html
Noch Fragen?
Vielen Dank!

Contenu connexe

Tendances

Tendances (7)

Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1
 
Große Applikationen mit AngularJS
Große Applikationen mit AngularJSGroße Applikationen mit AngularJS
Große Applikationen mit AngularJS
 
Warum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser machtWarum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser macht
 
Android Development ...and the daily challenges
Android Development ...and the daily challengesAndroid Development ...and the daily challenges
Android Development ...and the daily challenges
 
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreElectron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
 
Node.js Security
Node.js SecurityNode.js Security
Node.js Security
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
 

En vedette

2016.вестник ран 2
2016.вестник ран 22016.вестник ран 2
2016.вестник ран 2
профессор
 
Economía en américa
Economía en américaEconomía en américa
Economía en américa
KAtiRojChu
 

En vedette (11)

Solar Frontier - japonská CIS technologie
Solar Frontier - japonská CIS technologie Solar Frontier - japonská CIS technologie
Solar Frontier - japonská CIS technologie
 
Evau
EvauEvau
Evau
 
Ene i aita
Ene i aitaEne i aita
Ene i aita
 
Jorja&amp;adriana recipe of crema catalana
Jorja&amp;adriana       recipe of crema catalanaJorja&amp;adriana       recipe of crema catalana
Jorja&amp;adriana recipe of crema catalana
 
2016.вестник ран 2
2016.вестник ран 22016.вестник ран 2
2016.вестник ран 2
 
Beberapa rahasia dalam al qur'an. indonesian. bahasa indonesia
Beberapa rahasia dalam al qur'an. indonesian. bahasa indonesiaBeberapa rahasia dalam al qur'an. indonesian. bahasa indonesia
Beberapa rahasia dalam al qur'an. indonesian. bahasa indonesia
 
Persiapan Google Summer of Code (GSoC)
Persiapan Google Summer of Code (GSoC)Persiapan Google Summer of Code (GSoC)
Persiapan Google Summer of Code (GSoC)
 
¿Qué es una crisis económica?
¿Qué es una crisis económica?¿Qué es una crisis económica?
¿Qué es una crisis económica?
 
Economía en américa
Economía en américaEconomía en américa
Economía en américa
 
Tata kelola Teknologi Informasi dan Komunikasi
Tata kelola Teknologi Informasi dan KomunikasiTata kelola Teknologi Informasi dan Komunikasi
Tata kelola Teknologi Informasi dan Komunikasi
 
Fire alarm 2_e_combination
Fire alarm 2_e_combinationFire alarm 2_e_combination
Fire alarm 2_e_combination
 

Similaire à TypeScript

Lightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPALightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPA
mh0708
 
JPA the Versant Way
JPA the Versant WayJPA the Versant Way
JPA the Versant Way
jubecker
 

Similaire à TypeScript (20)

Typescript
TypescriptTypescript
Typescript
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit Rust
 
Backend-Services mit Rust
Backend-Services mit RustBackend-Services mit Rust
Backend-Services mit Rust
 
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
 
Lightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPALightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPA
 
SOLID Prinzipien, Designgrundlagen objektorientierter Systeme
SOLID Prinzipien, Designgrundlagen objektorientierter SystemeSOLID Prinzipien, Designgrundlagen objektorientierter Systeme
SOLID Prinzipien, Designgrundlagen objektorientierter Systeme
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare Systeme
 
Praesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbasePraesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit Extbase
 
JPA the Versant Way
JPA the Versant WayJPA the Versant Way
JPA the Versant Way
 
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
 
A/B Testing mit Node.js
A/B Testing mit Node.jsA/B Testing mit Node.js
A/B Testing mit Node.js
 
Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?
 
Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?
 
Hands-on Hystrix - Best Practices und Stolperfallen
Hands-on Hystrix - Best Practices und StolperfallenHands-on Hystrix - Best Practices und Stolperfallen
Hands-on Hystrix - Best Practices und Stolperfallen
 
Testing tools
Testing toolsTesting tools
Testing tools
 
Prototype 1.7
Prototype 1.7Prototype 1.7
Prototype 1.7
 
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2dayElegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
 
In-Memory Computing mit Apache Ignite und Kubernetes
In-Memory Computing mit Apache Ignite und KubernetesIn-Memory Computing mit Apache Ignite und Kubernetes
In-Memory Computing mit Apache Ignite und Kubernetes
 
Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 Wochen
 
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
 

Plus de Jens Siebert

Plus de Jens Siebert (15)

WebAssembly
WebAssemblyWebAssembly
WebAssembly
 
Embedded Rust
Embedded RustEmbedded Rust
Embedded Rust
 
Embedded Rust
Embedded RustEmbedded Rust
Embedded Rust
 
TinyML – Machine Learning für eingebettete Systeme
TinyML – Machine Learning für eingebettete SystemeTinyML – Machine Learning für eingebettete Systeme
TinyML – Machine Learning für eingebettete Systeme
 
Deep Learning mit TensorFlow.js
Deep Learning mit TensorFlow.jsDeep Learning mit TensorFlow.js
Deep Learning mit TensorFlow.js
 
Chatbots bauen mit dem Microsoft Bot Framework
Chatbots bauen mit dem Microsoft Bot FrameworkChatbots bauen mit dem Microsoft Bot Framework
Chatbots bauen mit dem Microsoft Bot Framework
 
Integrating The Things Network Applications with Azure IoT Services
Integrating The Things Network Applications with Azure IoT ServicesIntegrating The Things Network Applications with Azure IoT Services
Integrating The Things Network Applications with Azure IoT Services
 
GraphQL
GraphQLGraphQL
GraphQL
 
Embedded JavaScript
Embedded JavaScriptEmbedded JavaScript
Embedded JavaScript
 
Windows 10 IoT Core
Windows 10 IoT CoreWindows 10 IoT Core
Windows 10 IoT Core
 
Microsoft Bot Framework (Node.js Edition)
Microsoft Bot Framework (Node.js Edition)Microsoft Bot Framework (Node.js Edition)
Microsoft Bot Framework (Node.js Edition)
 
Microsoft Bot Framework (.NET Edition)
Microsoft Bot Framework (.NET Edition)Microsoft Bot Framework (.NET Edition)
Microsoft Bot Framework (.NET Edition)
 
Electron
ElectronElectron
Electron
 
Windows 10 IoT Core
Windows 10 IoT CoreWindows 10 IoT Core
Windows 10 IoT Core
 
Physical Web
Physical WebPhysical Web
Physical Web
 

TypeScript

  • 1. TypeScript Ein Blick über den Tellerrand DNUG Paderborn, 26. April 2016
  • 2. Über den Vortragenden  Jens Siebert  Diplom-Informatiker  Software-Architekt bei dSPACE (seit 2 Jahren)  Vorher: SmartCards und Medizintechnik Bild: privat (Jens Siebert, 2016)
  • 3. Bevor wir uns TypeScript widmen… Bild: Wikipedia (https://en.wikipedia.org/wiki/File:TeamTimeCar.com-BTTF_DeLorean_Time_Machine-OtoGodfrey.com-JMortonPhoto.com-07.jpg)
  • 4. JavaScript – Ein Blick in die Geschichte  Entwickelt bei Netscape durch Brendan Eich  Entwicklungsdauer bis zur ersten Version: 10 Tage  Beeinflusst durch Scheme, Perl, Self, Java, C, Python, etc.  JavaScript 1.0 im März 1996  Standardisierung durch ECMA in 1997 (ECMAScript)  Aktueller Standard: ECMAScript 2015 (ES2015/ES6)  Typische Anwendungsgebiete (initial):  DOM-Manipulation  Form-Validierung Bild: Wikipedia (https://en.wikipedia.org/wiki/File:Brendan_Eich_Mozilla_Foundation_official_photo.jpg)
  • 5. JavaScript - Features  Interpretiert  Funktional  Dynamisch typisiert var i = 5; i = „Hallo Welt“;  Objektorientiert (Prototyp-basierte Objektorientierung) var hund = Object.create(tier); hund.bellen = function() { console.log("Wuff"); } delete hund.bellen; hund.bellen(); // Kabumm  Keine (nativen) Mechanismen zur Strukturierung großer Software-Systeme
  • 6. Aktuelle Anwendungsgebiete von JavaScript Erkenntnis: Wartbarkeit und Erweiterbarkeit von JavaScript-Code skalieren nicht! Bilder: Wikipedia
  • 7. Fehlerkosten in der Software- Entwicklung Bild: OKTA, INC. (http://developer.okta.com/assets/img/2015-05-08-software-engineering-design-principles-agile-cost-curve.png)
  • 8. Auftritt TypeScript  Entwickelt bei Microsoft durch Anders Hejlsberg  Beeinflusst durch JavaScript, Java, C#  TypeScript 0.8 im Oktober 2012  Aktuelle Version: TypeScript 1.8 Bild: Wikipedia (https://en.wikipedia.org/wiki/File:Anders_Hejlsberg.jpg)
  • 9. TypeScript – Was ist das eigentlich?  Superset von JavaScript/ECMAScript  Features:  Hochgradige Kompatibilität zu ECMAScript (ES3, ES5, ES2015)  Übersetzung in „lesbaren“ JavaScript-Code  Strenge Typisierung (optional)  Mechanismen zur Strukturierung großer Software-Systeme  u.a. Klassen, Interfaces, Generics, Module, …  Minimale zusätzliche Laufzeit-Kosten  Enge Anlehnung an aktuelle und zukünftige ECMAScript-Standards  Services zur vereinfachten Integration in Entwicklungswerkzeuge  Cross Platform und Open Source
  • 10. TypeScript – Die Architektur Bild: GitHub/Microsoft (https://raw.githubusercontent.com/wiki/Microsoft/TypeScript/images/architecture.png)
  • 11. TypeScript Beispiele - Klassen class Greeter { greet() : string { return "Hello World!"; } } var Greeter = (function () { function Greeter() { } Greeter.prototype.greet = function () { return "Hello World!"; }; return Greeter; }());
  • 12. TypeScript Beispiele - Interfaces interface IGreeter { greet() : string; } class Greeter implements IGreeter { greet() : string { return "Hello World!"; } } var Greeter = (function () { function Greeter() { } Greeter.prototype.greet = function () { return "Hello World!"; }; return Greeter; }());
  • 13. TypeScript Beispiele - Namespaces namespace Greetings { export interface IGreeter { greet() : string; } export class Greeter implements IGreeter { greet() : string { return "Hello World!"; } } } var Greetings; (function (Greetings) { var Greeter = (function () { function Greeter() { } Greeter.prototype.greet = function () { return "Hello World!"; }; return Greeter; }()); Greetings.Greeter = Greeter; })(Greetings || (Greetings = {}));
  • 14. TypeScript Beispiele - Module interface IGreeter { greet() : string; } class Greeter implements IGreeter { greet() : string { return "Hello World!"; } } export { IGreeter, Greeter } // AMD Module syntax define(["require", "exports"], function (require, exports) { "use strict"; var Greeter = (function () { function Greeter() { } Greeter.prototype.greet = function () { return "Hello World!"; }; return Greeter; }()); exports.Greeter = Greeter; });
  • 15. TypeScript Beispiele – async/await async function main() { await ping(); } async function ping() { for (var i = 0; i < 10; i++) { await delay(300); console.log(“ping”); } } var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments)).next()); }); }; function main() { return __awaiter(this, void 0, void 0, function* () { yield ping(); }); } function ping() { return __awaiter(this, void 0, void 0, function* () { for (var i = 0; i < 10; i++) { yield delay(300); console.log(ping); } }); }
  • 16. TypeScript Beispiele – Singleton Pattern class Greeter { private static greeter : Greeter = null; public static GetInstance() : Greeter { if (this.greeter == null) { this.greeter = new Greeter(); } return this.greeter; } greet() : string { return "Hello World!"; } } var Greeter = (function () { function Greeter() { } Greeter.GetInstance = function () { if (this.greeter == null) { this.greeter = new Greeter(); } return this.greeter; }; Greeter.prototype.greet = function () { return "Hello World!"; }; Greeter.greeter = null; return Greeter; }());
  • 17. SOLID Prinzipien  Eingeführt durch Robert C. Martin (Uncle Bob)  Regeln für die Entwicklung von Software-Systemen, die einfach gewartet und erweitert werden können.  S – Single Responsibility Principle (SRP)  a class should have only a single responsibility  O – Open-Closed Principle (OCP)  software entities … should be open for extension, but closed for modification  L – Liskov Substitution Principle (LSP)  objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program  I – Interface Segregation Principle (ISP)  many client-specific interfaces are better than one general-purpose interface  D – Dependency Inversion Principle (DIP)  one should “Depend upon Abstractions. Do not depend upon concretions” Bild: Wikipedia (https://en.wikipedia.org/wiki/File:Robert_Cecil_Martin.png)
  • 18. Liskov Substitution Principle [1] interface IPersistenceService { save(entity : any) : number } class CookiePersistenceService implements IPersistenceService { save(entity : any) : number { var id = …; […] return id; } } class LocalPersistenceService implements IPersistenceService { save(entity : any) : number { var id = …; […] return id; } }
  • 19. Liskov Substitution Principle [2] class Favorites { private _persistenceSerice : IPersistenceService; constructor(persistenceService : IPersistenceService) { this._persistenceSerice = persistenceService; } public setPersistenceService(persistenceService : IPersistenceService) { this._persistenceService = persistenceService; } public saveFavorite(favorite : any) { this._persistenceSerice.save(favorite); } } var cookieFav = new Favorites(new CookiePersistenceService()); var localFav = new Favorites(new LocalPersistenceService()); cookieFav.setPersistenceService(new LocalPersistenceService());
  • 20. Interface Segregation Principle interface VehicleInterface { getSpeed() : number; getVehicleType() : number isTaxPayed() : boolean; isLightOn() : boolean; isLightOff() : boolean; startEngine() : void; accelerate : number; stopEngine() : void; } interface VehicleInterface { getSpeed() : number; getVehicleType() : number isTaxPayed() : boolean; } interface LightInterface { isLightOn() : boolean; isLightOff() : boolean; } interface EngineInterface { startEngine() : void; accelerate : number; stopEngine() : void; }
  • 21. Ausblick auf TypeScript 2.0  Non-nullable types  Readonly properties  private and protected constructors  abstract properties  async/await support for ES5/ES3  und noch vieles mehr…
  • 22. Zusammenfassung  TypeScript bietet…  … strenge Typisierung  … Mechanismen zur Strukturierung großer Software-Systeme  … Kompatibilität zu bestehenden und zukünftigen ECMAScript-Standards  TypeScript ermöglicht…  … Prüfung der Software während der Implementierung  … vereinfachte Integration in Entwicklungswerkzeuge  … Anwendung bekannter und bewährter Prinzipien für die Entwicklung großer Software-Systeme
  • 23. Literatur-Tipps Bilder: Packt Publishing (https://www.packtpub.com/sites/default/files/5548OS_Learning%20TypeScript_.jpg) Rheinwerk Verlag (https://s3-eu-west-1.amazonaws.com/cover2.galileo-press.de/print/9783836223799_800.png) TypeScript Documentation: http://www.typescriptlang.org/docs/tutorial.html TypeScript Playground: http://www.typescriptlang.org/play/index.html