Typescript 将整个模块导出为构造函数
假设我有一个nodejs模块,当我需要它时,它会向我返回一个构造函数。如下所示: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文件
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";