将整个模块导出为构造函数

时间:2016-08-24 21:54:12

标签: typescript

假设我有一个nodejs模块,当我需要它时,它会向我返回一个构造函数。如下所示:

var Mod = require("modulename");
var mod = new Mod();
mod.method();

我想编写一个可以导入和使用的.d.ts声明文件,如下所示:

import * as Mod from "mod";
let mod = new Mod();
mod.method();

我已经尝试过阅读所有关于Typescript网站的文档,但是老实说就像泥巴一样清晰,我觉得我已经尝试了我的.d中存在的类,接口,命名空间,模块和导出的每个组合。 ts文件。我想知道上述是否可以实现。任何人都可以提供任何帮助吗?

1 个答案:

答案 0 :(得分:4)

而不是写这个

import * as Mod from "mod";
let mod = new Mod();

你应该写这个

import Mod = require("mod");
let mod = new Mod();

为什么?

import * as Mod from "mod";

这是ES6模块的导入语法。它表示您正在将"mod"模块对象导入本地名称Mod。 ES6模块仅公开属性,不能作为函数或new调用。

我会再次这样说,因为人们通常不相信我或选择忽略它: ES6模块只公开属性,不能作为函数或new调用。

如果您开始将代码编译到ES6运行时(而不是使用CJS / AMD向ES5模块下级),您的代码将停止工作。但是ES6模块中没有require功能,因此“旧式”import Mod = require("mod");仍然可以。