It is time to start learning the language of the future: TypeScript
There are a lot of online resources to learn the language, here I just share a small piece of code with the basics of the language:
//--------------- // 1 Basic types //--------------- var myBooleanVar: boolean = false; var myNumberVar: number = 29; var myStringVar: string = "Juan Carlos"; // 1.1 Arrays var myArrayVar: number[] = [1, 2, 3]; var myArrayVar: Array<number> = [1, 2, 3]; // 1.2 Enumerations enum Direction { Up, Down, Left, Right }; var myDirectionVar: Direction = Direction.Up; // 1.3 Any var myAnyTypeVar: any = "I am a text"; myAnyTypeVar = false; // before it was string, now a boolean // 1.4 Void function log(msg: string): void { console.log(msg); // this functions returns nothing } //--------------- // 2 Interfaces //--------------- interface IPerson { name: string; age?: number; // optional parameter } function sayHello(person: IPerson) { console.log(person.name); if (person.age) { console.log("Your age is " + person.age) } } // myVar has no type but has all the fields that a // Person should have. Therefore is a Person (duck typing) var myVar = { name: "Juan Carlos" }; sayHello(myVar); // 2.1 Interfaces extends interface IStudent extends IPerson { studentId: number; } // 2.2 Interfaces indexes interface Friends { [index: number]: IPerson; length: number; } // 2.3 Interfaces with functions/methods interface PeopleService { getPersonId(person: IPerson): number; // a function that has a Person has parameter and return a boolean (newFriend: IPerson): boolean; } //--------------- // 3 Classes //--------------- // 3.1 Interfaces implementation interface IVehicle { move(direction: Direction); registrationNumber: number; } class Vehicle implements IVehicle { registrationNumber: number; constructor(id: number) { this.registrationNumber = id; } move(direction: Direction) { console.log("Moving" + direction); } } // 3.2 Classes Extends class Car extends Vehicle { // by default all public private numberOfWheels: number = 4; speed: number = 120; // method override move(direction: Direction) { console.log("Speed = " + this.speed); // call base super.move(direction); } } var myCar: IVehicle = new Car(1234); myCar.move(Direction.Up); // 3.3 Classes, define class fields in constructor // add public or private to the parameter class Motorbike implements IVehicle { private numberOfWheels: number = 2; // the constructor defines a public field 'registrationNumber' constructor( public registrationNumber: number, // define a private field with the value passed as parameter // if no value specified, the field as the value 90 private speed: number = 90) { } move(direction: Direction) { console.log("Moving the motorbike" + direction); } } // 3.4 Accesors and static fields class Plane implements IVehicle { // Static field static minSpeed: number = 100; static speedCorrectionFactor: number = 0.8; constructor( public registrationNumber: number, private _speed: number = 300) { } // speed getter get getSpeed(): number { // for some reason the public speed is 80% // of the realone return this._speed * Plane.speedCorrectionFactor; } // speed setter set setSpeed(newSpeed: number) { if (newSpeed > Plane.minSpeed) { this._speed = newSpeed; } } move(direction: Direction) { console.log("Flying! " + direction); } }
Resources:
http://www.typescriptlang.org/Handbook