function compute(a, b) {
return a * b;
}
var c = compute(4,2);
var a:string = "hello";
var a = "hello"
number, boolean, string, any
var o:Object = new Object()
function(t:Type):void
function(default = "default", optional?:Type)
function(...args:Type[])
var callback: (arg1:Type1, arg2:Type2) => Type3;
var t:string[] = [];
var t:Array<string> = new Array<string>()
var m:{ [key:string]:Type; } = {}
var a:typeof b;
var a = <Type> b;
interface MyInterface extends OtherInterface {...}
property:string;
optionalProperty?:Type;
optionalMethod?(value:boolean):string;
():number;
var p:{x:number; y:number} = {x: 5, y: 12, z: 6};
class MyClass extends OtherClass implements MyInterface {...}
abstract class MyAbstractClass {...}
constructor(public publicProperty:string, value = 3) {
super();
this._privateProperty = value;
}
private _privateProperty:number;
protected protectedProperty:string;
public method(value:string) {
return super.method(value) + this.publicProperty;
}
publicProperty = "toto";
get privateProperty() {
return this._privateProperty;
}
module mymodule {}
var privateVar = 12;
function privateFunction() {...}
class MyClass{};
export var publicVar = privateFunction();
export function publicFunction() {
return privateVar;
}
export interface MyInterface {...}
import * as Math from "my/math";
import { add, subtract } from "my/math";
(value1:string, value2:string) => {
return this.value + value1 + value2;
}
class C {
@log
foo(n: number) {
return n * 2;
}
}
interface Document {
createElement(tagName: string): HTMLElement;
createElement(tagName: 'div'): HTMLDivElement;
createElement(tagName: 'span'): HTMLSpanElement;
// + 100 more
}
<T>(items:T[], callback:(item:T) => T):T[]
interface Pair<T1, T2> {
first:T1;
second:T2;
}
<T extends ConstrainedType>():T
var t = new Array<number>();
enum Options {
FIRST,
EXPLICIT = 2,
BOOLEAN = Options.FIRST | Options.EXPLICIT
}