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

Typescript 将整个模块导出为构造函数,typescript,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文件

假设我有一个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文件中存在的类、接口、名称空间、模块和导出的所有组合。我想知道,上述目标是否能够实现。有人能提供帮助吗?

不要写这篇文章

import * as Mod from "mod";
let mod = new Mod();
你应该写这个

import Mod = require("mod");
let mod = new Mod();
为什么?

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

我要再说一遍,因为人们通常不相信我,或者选择忽略它:ES6模块只公开属性,不能作为函数调用,也不能使用
new


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

好的,谢谢,我将尝试修补我的.d.ts文件,尝试使用这种导入形式使其正常工作。那么,让ES6模块导入语法工作的唯一方法是要求原始模块作者(不是我)重写以将构造函数作为属性公开,而不是直接公开吗?
import * as Mod from "mod";