2014-02-10 99 views
2

在* .d.ts文件之間有什麼區別:接口+新的VS級+構造函數打字稿

declare module "m1" { 
} 

declare module m1 { 
} 

而且之間有什麼區別:

declare module "m1" { 
    export class c1 { 
     constructor(value: string); 
    } 
} 

declare module "m1" { 
    export interface c1 { 
     new(value: string); 
    } 
} 

回答

3

唯一在報價模塊名稱不同的是,他們只能在環境聲明中使用。當您使用帶引號的名稱時,您正在描述將被模塊加載的模塊(使用require)。

的類和接口的區別是,隨着類,你將被允許直接創建新實例:

var instance = new m1.c1('val'); 

有了接口,則需要另外提供的是被輸入到一個變量爲了創建接口一個新的:

declare module m1 { 
    interface c1 { 
     new(value: string); 
    } 

    var example: m1.c1; 
} 

// Not allowed 
// var instance = new m1.c1('val'); 

// Allowed 
var instance = new m1.example('val'); 

使用new m1.c1('val')將讓你的錯誤:

The property 'c1' does not exist on value of type 'typeof m1'.