Typescript - A developer friendly javascript

33
A developer friendly Javascript Pradip Hudekar [email protected]

description

A introduction to Typescript language as a way to improve javascript development both on client and server side.

Transcript of Typescript - A developer friendly javascript

Page 1: Typescript - A developer friendly javascript

A developer friendly Javascript

Pradip [email protected]

Page 2: Typescript - A developer friendly javascript

Javascript

● What is it?

● Who uses it?

● Why?

Page 3: Typescript - A developer friendly javascript

Problems

what haunts you during Javascript development?

Page 4: Typescript - A developer friendly javascript

It is not typesafe

var a = 3var b = 5

a++c = a + b

a = "hello"

Page 5: Typescript - A developer friendly javascript

Can easily become complex

Ever tried writing Object Oriented Javascript?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 Snake = (function (_super) { __extends(Snake, _super); function Snake() { _super.call(this, "snake"); } Snake.prototype.crawl = function () { this.move(); console.log(this.name + ' is crawling'); }; return Snake;})(Animal);

Page 6: Typescript - A developer friendly javascript

Hard to keep track of context

Context hell

var myObject = {

AddChildRowEvents: function(row, p2) {

if(document.attachEvent) {

row.attachEvent('onclick',function(){

this.DoSomething();});

} else {

row.addEventListener('click',function(){

this.DoSomething();}, false);

}},

DoSomething: function() { this.SomethingElse();} }

Page 7: Typescript - A developer friendly javascript

Long feedback cycle

● Errors come only at runtime

● And not even that in some cases

● Difficult to debug the minified js files

Page 8: Typescript - A developer friendly javascript

Can Typescript help us?

What’s in the menu

Page 9: Typescript - A developer friendly javascript

Typescript - what is it?

A language which compiles to clean Javascript

Page 10: Typescript - A developer friendly javascript

Virtually no learning curve

It is superset of Javascript

Page 11: Typescript - A developer friendly javascript

Static compilation

Catches errors early

Page 12: Typescript - A developer friendly javascript

Provides syntactic sugar

Reduces lots of boilerplate code

Page 13: Typescript - A developer friendly javascript

Readable code

Easy to understand and follow

Page 14: Typescript - A developer friendly javascript

Scalable

Offers classes, modules, and interfaces to help you build robust components

Page 15: Typescript - A developer friendly javascript

Better tools

● Refactoring

● Intellisense

● Debugging support

● Code navigation

Page 16: Typescript - A developer friendly javascript

Say no to self = this

No more context related issue

Page 17: Typescript - A developer friendly javascript

Open Source

Community can make it even better

Page 18: Typescript - A developer friendly javascript

ECMA Script 6

Adopting many modern language features

Page 19: Typescript - A developer friendly javascript

Let’s dive in

Show me the real stuff

Page 20: Typescript - A developer friendly javascript

Basic Types

Booleanvar isDone: boolean = false;

Numbervar height: number = 6;

Stringvar name: string = "bob";

Arrayvar list:number[] = [1, 2, 3];

var list:Array<number> = [1, 2, 3];

Page 21: Typescript - A developer friendly javascript

Basic Types Continued

Enumenum Color {Red = 1, Green = 2, Blue = 4};var c: Color = Color.Green;

var colorName: string = Color[2];

Anyvar list:any[] = [1, true, "free"];list[1] = 100;

Voidfunction warnUser(): void { alert("This method does not return anything");}

Page 22: Typescript - A developer friendly javascript

Interfaces

Interfaces are treated as contractinterface Shape { color: string;}

function DrawShape(shapeToDraw: Shape) { alert(shapeToDraw.color);}

Typescript uses Duck-Typingfunction DrawShape(shapeToDraw: {color:string}) { alert(shapeToDraw.color);}

Page 23: Typescript - A developer friendly javascript

Interfaces continued

Interfaces can be also created for functionsinterface ErrorCallback { (message: string): boolean;}

function GetData(url:string,error: ErrorCallback){

if(!tryGetData(url)){

error(‘Could not get data’);

}

}

GetData(‘http://foo.bar’,function(message:string){

alert(message);

});

Page 24: Typescript - A developer friendly javascript

Classes

class Greeter { greeting: string; constructor(message: string) { this.greeting = message; } greet() { return "Hello, " + this.greeting; }}

var greeter = new Greeter("world");

greeter.greet();

Page 25: Typescript - A developer friendly javascript

Implementing interfaces

interface Movable {

move();

}

class Animal implements Movable{ move() { console.log(“Animal is moving”); }}

Page 26: Typescript - A developer friendly javascript

Inheritance

interface Movable { move(); }

interface Animal extends Movable {

eat(food: Eatable);

}

class Tiger extends Cat{ move() { console.log(“Tiger is running ”); }

eat() { console.log(“Tiger is eating”); }}

Page 27: Typescript - A developer friendly javascript

Functions

Named functionfunction add(x: number, y: number): number { return x+y;}

Anonymous functionvar myAdd = function(x: number, y: number): number {

return x+y;

};

Page 28: Typescript - A developer friendly javascript

Parameters

Optional parameterfunction buildName(firstName: string, lastName?: string) { if (lastName) return firstName + " " + lastName; else return firstName;}

Default parameterfunction buildName(firstName: string, lastName = "Smith") { return firstName + " " + lastName;}

Page 29: Typescript - A developer friendly javascript

Generics

interface Lengthwise { length: number;}function loggingIdentity<T extends Lengthwise>(arg: T): T { console.log(arg.length);

return arg;}

Page 30: Typescript - A developer friendly javascript

Modules

Internal Modulesmodule Expertalks {

export class Session{

title: string; speaker: string;

}}

var session = new Expertalks.Session();

Page 31: Typescript - A developer friendly javascript

Modules Continued

External Modules● CommonJS

● AMD

import shapes = require('Shapes');

Page 32: Typescript - A developer friendly javascript

I have existing js libraries

Very easy to migrate

Type Definition files (.d.ts)declare class Bird{

public fly():void;

constructor();

}

Treasure of definitions @ DefinitelyTyped.org

Page 33: Typescript - A developer friendly javascript

References

TypeScript Language home

http://www.typescriptlang.org/

Interactive Playground

http://www.typescriptlang.org/Playground

Type definitions for popular JS libraries

http://www.definitelytyped.org/