typescript - TypeScript 中的接口(interface) + 新 vs 类 + 构造函数

标签 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);
    }
}

最佳答案

引号中模块名称的唯一不同是它们只能用于环境声明。当您使用带引号的名称时,您是在描述一个将被模块加载的模块(使用 require)。

类和接口(interface)之间的区别在于,对于类,您将被允许直接创建新实例:

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

对于接口(interface),您需要另外提供一个输入到接口(interface)的变量,以便创建一个新的接口(interface):

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'.

关于typescript - TypeScript 中的接口(interface) + 新 vs 类 + 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21669400/

相关文章:

typescript - Gulp-watch typescript 文件并仅发布更改的文件

typescript - 如何在运行时获取 TypeScript 枚举类型的名称?

typescript - 允许接口(interface)隐式转换为 JsonData

javascript - 在命名空间中没有静态函数的情况下迭代枚举

typescript - 创建具有接口(interface) A 和接口(interface) B 的所有属性的类型

typescript - 在 next-connect 中间件中覆盖请求类型

javascript - 在兄弟组件之间传递数据

function - 当 Typescript 具有不同的参数计数时,有没有办法让 Typescript 认为函数类型不相等?

javascript - 导出未定义为 ia tsc'ed (js) 文件

Typescript 嵌套泛型