在TypeScript中接口+ new vs class +构造函数

时间:2014-02-10 04:58:47

标签: typescript

在* .d.ts文件中有什么区别:

declare module "m1" {
}

declare module m1 {
}

还有什么区别:

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

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

1 个答案:

答案 0 :(得分:5)

与引号中的模块名称唯一不同的是它们只能在环境声明中使用。当您使用带引号的名称时,您将描述一个模块加载的模块(使用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')会出现错误:

  

属性'c1'在'typeof m1'类型的值上不存在。