//// [interfacedecl.ts] interface a0 { (): string; (a, b, c?: string): number; new (): string; new (s: string); [n: number]: ()=>string; [s: string]: any; p1; p2: string; p3?; p4?: number; p5: (s: number) =>string; f1(); f2? (); f3(a: string): number; f4? (s: number): string; } interface a1 { [n: number]: number; } interface a2 { [s: string]: number; } interface a { } interface b extends a { } interface c extends a, b { } interface d extends a { } class c1 implements a { } var instance2 = new c1(); //// [interfacedecl.js] var c1 = (function () { function c1() { } return c1; })(); var instance2 = new c1(); //// [interfacedecl.d.ts] interface a0 { (): string; (a: any, b: any, c?: string): number; new (): string; new (s: string): any; [n: number]: () => string; [s: string]: any; p1: any; p2: string; p3?: any; p4?: number; p5: (s: number) => string; f1(): any; f2?(): any; f3(a: string): number; f4?(s: number): string; } interface a1 { [n: number]: number; } interface a2 { [s: string]: number; } interface a { } interface b extends a { } interface c extends a, b { } interface d extends a { } declare class c1 implements a { } declare var instance2: c1;