TypeScript Language - Tuong-Nguyen/Angular-D3-Cometd GitHub Wiki
Variable declaration
let
- Must be defined before used.
 - Block-scoped
 
const
Type annotation and inference
// type inference: number
var num = 2;
// a is "any" type
var a; 
// type annotation: number
var num: number = 2;
// type annotation: boolean
var boolvar: boolean = true;
// type annotation: string
var message: string = 'Hello';
// init is a function type which accept 1 string parameter and return void.
var init: (s: string) => void;
// POJO - duck typing: type { id: number, name: string }
var obj = { id: 10, name: 'Google'};
- Ambient declaration
 
// reference to external library
/// <reference path="jquery.d.ts" />
// declare a variable which is defined in external library
declare var $;
$("div").text("john");
Enum
enum DoorState = {
    Open,
    Closed
}
DoorState.Open // return 0
DoorState[0] // return Open
DoorState["Open"] // return 0
Union
var StringOrNumber = string | number;
var age: StringOrNumber ;
age = 'Hello';
age = 10;
// Type guard
if (typeof age === "number") {
    var test = age * 10; 
}
Function
- Signature: 
function add(a: number, b: number) => number 
- name
 - number of parameters
 - type of parameters
 - return value
 
- Optional parameter: 
function add(a: number, b?: number) => number 
- last parameter.
 - Value is 
undefinedif it is not input. 
- 
Default value parameter:
function add(a: number, b: number = 0) => number - 
Rest parameter:
function add(a: number, ...argArray: number[]) => number 
Class
class Car {  // class
   _engine: String; // field
   constructor(engine: Engine){  // constructor
      this.engine = engine;
   }
   
   // function
   start() {
      return "Started " + this._engine;
   }
   // Property
   get engine(): string {
      return this._engine;
   }
   set engine(value: string) {
      if(value == undefined) throw "Supply an Engine!";
      this._engine = value;
   }
}
Inheritance:
- single inheritance
 
Abstract class: abstract method
Interface
Module
Export
External module is the preferred way for defining module (namespace or internal module is not recommended by ES6)
   class Rectangle {
       constructor(public height: number, public width: number) {
       }
   }
   export { Rectangle as RectangleShape };
}
var rect = new Shapes.Rectangle(2, 4);
- Export Rectangle class with new name RetangleShape.
 
Reference a module
import { RectangleShape as Rect } from "./shapes.ts";
let rect = new Rect(2, 4);
import * as Shapes from "./shapes.ts";
let rect = new Shapes.Rect(2, 4);
Note: javascript must be included in correct order for running.
Default export
When there is only 1 item for exporting, we can use default export. When importing it, we can specify whatever name we like.
   // Export
   export default class Rectangle {
       constructor(public height: number, public width: number) {
       }
   }
   // Import
   import Rect from "./Shapes.ts";
Module loader
Typescript can be compiled to use different module loader
- CommonJS - node
 - AMD - using Require.js (browser)
 - UMD
 
Generic
class FootballGame<T implement IFootbalClub> {
}
Decorator: function
- Class
 
function decorator(constructor: Function)
- Parameter: Class prototype
 - Called when class is created.
 
- Property
 
function decorator(target:any, propertyKey: string)
- Parameter: Class prototype and property name
 
- Method
 
function decorator(target:any, methodName: string, methodDescription: any)
- Parameter: Class prototype, method name, method description
 
- Parameter
 
function decorator(target:any, methodName: string, parameterIndex: number)
- Parameter: Class prototype, method name, parameter index.