我试图使用声明(d.ts)文件将nodejs类导入typescript代码 . 为了测试它,我创建了一个简单的nodejs类,声明文件和要导入(使用)nodejs类的typescript文件 .
TS_PROJECT / node_modules / newtest / index.js的内容:
var HelloWorld = function() {
}
HelloWorld.hello2 = function() {
console.log("hello2");
}
HelloWorld.prototype.hello1 = function() {
console.log("hello1");
}
module.exports = HelloWorld;
正如您所看到的,它是一个具有成员函数“hello1”和静态函数“hello2”的类 .
现在我试图在TS_PROJECT / newtest / index.d.ts中声明它:
declare module newtest {
export class HelloWorld {
hello1():void;
static hello2():void;
}
}
export = newtest;
最终尝试从index.ts中使用它:
/// <reference path="./newtest/index.d.ts" />
import * as mymodule from "newtest";
现在我正在尝试实例化对象并调用函数,但无论我尝试它不编译 . 我尝试了很多变化,但没有一个有效 . 例如:
// Doesn't Work
import HelloWorld = mymodule.HelloWorld;
let s: HelloWorld = new HelloWorld();
// It results with the following compile errors:
// error TS2339: Property 'HelloWorld' does not exist on type 'typeof "newtest"'.
// error TS2694: Namespace '"newtest"' has no exported member 'HelloWorld'.
我不会列出其余的所有变化 . 但如果有人能帮助我正确声明和实例化对象,我将不胜感激 .
谢谢!
2 回答
您不需要
import
类型,因为您已经从模块导入所有内容并将其命名为mymodule
. 你可以做几件事:我想我找到了答案 . 在我的示例中,声明模块“newtest”表示导出的nodejs对象 . 由于导出的对象已经是HelloWorld对象,因此在另一个类HelloObject中定义是错误的 . 所以最简单的解决方案是拥有一个nodejs代码,如:
这样我们就可以导出一个内部有HelloWorld类的对象 . 这修复了编译和编译的JS .
我在声明文件“newtest”中的另一个问题必须是引号 . 只有这样它才能将模块附加到nodejs包 .
这些修复解决了我的问题 . 但问题仍然存在 . 如果我仍然需要使用“module.exports = HelloWorld;”怎么办?在这种情况下我应该如何声明这个模块?