29. Treffen - Tobias Meier - TypeScript

50
TypeScript Tobias Meier, BridgingIT GmbH [email protected] @bITTobiasMeier

Transcript of 29. Treffen - Tobias Meier - TypeScript

Page 1: 29. Treffen - Tobias Meier - TypeScript

TypeScript

Tobias Meier, BridgingIT GmbH

[email protected] @bITTobiasMeier

Page 2: 29. Treffen - Tobias Meier - TypeScript

Tobias MeierLead Softwarearchitekt Microsoftdging-it.de

Standort Karlsruhe

Rüppurrer Straße 4

76137 Karlsruhe

Standort Stuttgart

Königstraße 42

70173 Stuttgart

Standort Zug

(Schweiz)

Baarerstraße 14

CH-6300 Zug

Standort Mannheim

N7, 5-6

68161 Mannheim

Standort Frankfurt

Solmsstraße 4

60486 Frankfurt

Standort München

Theresienhöhe 28

80339 München

Standort Köln

Waidmarkt 11

50676 Köln

Wir bringen Dinge zusammen

Page 3: 29. Treffen - Tobias Meier - TypeScript

Agenda

Bestandsaufnahme

Überblick TypeScript

Toolchain

Details

Page 4: 29. Treffen - Tobias Meier - TypeScript

JavaScript

Page 5: 29. Treffen - Tobias Meier - TypeScript
Page 6: 29. Treffen - Tobias Meier - TypeScript
Page 7: 29. Treffen - Tobias Meier - TypeScript
Page 8: 29. Treffen - Tobias Meier - TypeScript
Page 9: 29. Treffen - Tobias Meier - TypeScript

JavaScript

Intellisense

Typsicherheit

Compiler

Refactoring

…….

Page 10: 29. Treffen - Tobias Meier - TypeScript

Are you saying you cannot write large programs in

JavaScript ?

No, you can write large programs in JavaScript. You just

can’t maintain them.

Erik Meijer

Anders Hejlsberg

http://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012/Panel-Web-and-Cloud-Programming (02.04.2012, ca. 11. Min.)

Page 11: 29. Treffen - Tobias Meier - TypeScript
Page 12: 29. Treffen - Tobias Meier - TypeScript

TypeScript 0.8

Typsicherheit

Vererbung

Module

Compiler

Superset von JavaScript

Page 13: 29. Treffen - Tobias Meier - TypeScript

http://www.typescriptlang.org/Playground

Page 14: 29. Treffen - Tobias Meier - TypeScript

Datentypen: Number

var zahl: number;

var zahl2 = 33;

zahl = 2;

zahl = "abc";

//Implizit Datentyp number

Page 15: 29. Treffen - Tobias Meier - TypeScript

Interfaces, Klassen und Vererbunginterface IFahrzeug {fahren(kmh: number): void; bremsen?():void;

}

class Auto implements IFahrzeug {fahren(kmh: number): void {

var span = document.createElement('span');span.textContent = "fahre " +

kmh.toLocaleString(); document.body.appendChild(span);

} }

var __extends = this.__extends ||function (d, b) {

for (var p in b)if (b.hasOwnProperty(p)) d[p] = b[p];

function __() { this.constructor = d; } __.prototype = b.prototype;d.prototype = new __();

};

var Auto = (function () {function Auto() { } Auto.prototype.fahren = function (kmh) {var span = document.createElement('span');span.textContent = "fahre " +

kmh.toLocaleString();document.body.appendChild(span);

}; return Auto;

})(); IFFE

Page 16: 29. Treffen - Tobias Meier - TypeScript

Interfaces, Klassen und Vererbungvar Tesla = (function (_super) { __extends(Tesla, _super);

function Tesla() { _super.apply( this, arguments);

} return Tesla;

})(Auto);

var fahrzeug; fahrzeug = new Tesla(); fahrzeug.fahren(20);

class Tesla extends Auto { }

var fahrzeug: IFahrzeug; fahrzeug = new Tesla(); fahrzeug.fahren(20);

Page 17: 29. Treffen - Tobias Meier - TypeScript

Casting

var auto = <Auto>meinMercedes;

var fahrzeug = <any> auto;

Page 18: 29. Treffen - Tobias Meier - TypeScript

Declaration

declare var $;

Page 19: 29. Treffen - Tobias Meier - TypeScript

Typdefinitionen verwenden

Interfacedefinitionen

Sammlung für alle gängigen Bibliotheken:

https://github.com/borisyankov/DefinitelyTyped

Über NuGet

Page 20: 29. Treffen - Tobias Meier - TypeScript

Typdefinitionen erzeugen

Page 21: 29. Treffen - Tobias Meier - TypeScript
Page 22: 29. Treffen - Tobias Meier - TypeScript

Browser führt JavaScript aus

TypeScriptQuellcode

SourceMap

Page 23: 29. Treffen - Tobias Meier - TypeScript

Demo

Intellisense, Refactoring

Referenzieren, Typedefinitions

Konfigurationsmöglichkeiten

Debuggen

Page 24: 29. Treffen - Tobias Meier - TypeScript

Alphaversion –

trotzdem produktiv

verwenden ?

Page 25: 29. Treffen - Tobias Meier - TypeScript

Und im Notfall ?

Page 26: 29. Treffen - Tobias Meier - TypeScript

Meine Toolchain

Visual Studio 2013, 2015

IE / Chrome

Web Essentials TSLint

Resharper

Page 27: 29. Treffen - Tobias Meier - TypeScript

Nur eine Javascript-Datei

Page 28: 29. Treffen - Tobias Meier - TypeScript

Details

Properties

Datentypen

Lambda Expressions

Module

Page 29: 29. Treffen - Tobias Meier - TypeScript

Properties

var auto = new Auto(); auto.kmh = 100;

class Auto {private _kmh: number; get kmh(): number {

return this._kmh; }set kmh(value: number) {this._kmh = value;

} }

Page 30: 29. Treffen - Tobias Meier - TypeScript

Wichtigste Neuerung

in .Net 2.0 ?

Page 31: 29. Treffen - Tobias Meier - TypeScript

Datentypen: Generics

export class Example extends Blume {constructor(private list: Array<number>) { } add(val:number):void {

this.list.push(val); }

}

var data: Array<number>; var example = new Example(data); example.add(10);Example.add ("Hallo"); //Fehler

Page 32: 29. Treffen - Tobias Meier - TypeScript

Datentypen: Generics

export class GenericClass<T extends Example> {constructor(private value: T) {}

}

var data : Array<number>; var a1 = new GenericClass(new Example(data));

var a2 = new GenericClass(10);

Page 33: 29. Treffen - Tobias Meier - TypeScript

Datentypen: Union Types

function f(x: number | number[]) { if (typeof x === "number") {

return x + 10; } else {

// return sum of numbers}

}

Page 34: 29. Treffen - Tobias Meier - TypeScript

Datentypen: Enums

enum Color {Red, Green, Yellow)

var mycolor = Color.Green;

var Color;(function (Color) {

Color[Color["Red"] = 0] = "Red";Color[Color["Green"] = 1] = "Green";Color[Color["Yellow"] = 2] = "Yellow";

})(Color || (Color = {}));var mycolor = 1 /* Green */;

Page 35: 29. Treffen - Tobias Meier - TypeScript

Datentypen: Konstante Enums

const enum Color {Red, Green, Yellow)

var mycolor = Color.Green;

var mycolor = 1 /* Green */;

Page 36: 29. Treffen - Tobias Meier - TypeScript

Type Aliase

type BoolArray = Array<boolean>;type NumberCallback = (zahl:number) => void;

Page 37: 29. Treffen - Tobias Meier - TypeScript

instanceof

class Dog { woof() { } }class Cat { meow() { } }

var pet: Dog|Cat = /* ... */;if(pet instanceof Dog) {

pet.woof(); } else {

pet.woof();}

Page 38: 29. Treffen - Tobias Meier - TypeScript

„this“ und JavaScript

class Greeter{//...start() {

this.timerToken = setInterval(function () {this.span.innerHTML = new Date().toUTCString();

}, 500); }

}

Page 39: 29. Treffen - Tobias Meier - TypeScript

„this“ und JavaScript

class Greeter{//...start() { var _this = this; this.timerToken = setInterval(function () {_this.span.innerHTML = new Date().toUTCString();}, 500); }

}

Page 40: 29. Treffen - Tobias Meier - TypeScript

Lambda und „this“

start() { this.timerToken = setInterval(() =>this.span.innerHTML = new Date().toUTCString(), 500);

}

Page 41: 29. Treffen - Tobias Meier - TypeScript

Interne Module

module demo{

export class ExpAuto{

constructor (data:string){

}

}

}

var auto1 =new demo.ExpAuto ("Tesla");

import MyAuto = demo.ExpAuto;

var auto2 = new MyAuto()

Page 42: 29. Treffen - Tobias Meier - TypeScript

Externe Module

AMD oder CommonJS

module nicht notwendig

export genügt

//Datei fahrzeug.ts

export class ExpAuto{

constructor (data:string){

}

}

import car= require("fahrzeug");

var auto = new car.ExpAuto("Tesla");

Page 43: 29. Treffen - Tobias Meier - TypeScript

Externe Module

//Datei fahrzeug.ts

class ExpAuto{

constructor (data:string){

}

}export = ExpAuto;

import car= require("fahrzeug");

var auto = new car("Tesla");

Page 44: 29. Treffen - Tobias Meier - TypeScript

Scopes

test() {var x = 3;this.addMsg("x:" + x.toLocaleString());if (x === 3){

var x = 2;this.addMsg("x (im IF):" + x.toLocaleString());

}this.addMsg("x (außerhalb):" + x.toLocaleString());

}

Page 45: 29. Treffen - Tobias Meier - TypeScript

Mehr Scopes dank Let

test() {var x = 3;this.addMsg("x:" + x.toLocaleString());if (x === 3){

let x = 2;this.addMsg("x (im IF):" + x.toLocaleString());

}this.addMsg("x (außerhalb):" + x.toLocaleString());

}

Page 46: 29. Treffen - Tobias Meier - TypeScript

Demo

EcmaScript 6 - Syntax

Voraussetzung

Windows 10 Preview März

Visual Studio 2015 CTP 6

Page 47: 29. Treffen - Tobias Meier - TypeScript

Angular 2: Built on TypeScript

We're excited to unveil the result of a months-long partnership with the Angular team.

This partnership has been very productive and rewarding experience for us, and as part of this collaboration, we're happy to announce that Angular 2 will now be built with TypeScript. We're looking forward to seeing what people will be able to do with these new tools and continuing to work with the Angular team to improve the experience for Angular developers.

Jonathan Turner [MS] am 05.03.2015 Quelle: http://blogs.msdn.com/b/typescript/archive/2015/03/05/angular-2-0-built-on-typescript.aspx

Page 48: 29. Treffen - Tobias Meier - TypeScript

Typescript 1.5 (Alpha)

Neue ES6-Features

Let/const werden auch nach ES5 kompiliert

Decorators

Sublime Text plugin

Page 49: 29. Treffen - Tobias Meier - TypeScript

TypeScript

Was es kann

Typsicherheit

Vererbung (Prototypal Inheritance)

Module-Management

Gültigkeitsbereiche (teilweise)

Basis für besseren Refactoring-Support

Was es nicht kann:

JavaScript ersetzen

Page 50: 29. Treffen - Tobias Meier - TypeScript

Vielen Dank

http://www.typescript-lang.org

http://blogs.msdn.com/b/typescript

Email: [email protected] Twitter: @bITTobiasMeier