【问题标题】:interface + new vs class + constructor in TypeScriptTypeScript 中的接口 + 新与类 + 构造函数
【发布时间】:2014-02-10 04:58:47
【问题描述】:

在 *.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);
    }
}

【问题讨论】:

    标签: typescript


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      相关资源
      最近更新 更多