我正在尝试使用声明(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'.
我不会列出其余的所有变体。但如果有人能帮助我正确声明和实例化对象,我将不胜感激。
谢谢!
答案 0 :(得分:0)
您不需要import
类型,因为您已经从模块导入了所有内容并将其命名为mymodule
。你可以做几件事:
直接导入课程:
import { HelloWorld } from 'newtest'
let s:HelloWorld = new HelloWorld();
从导入的模块中访问类型:
import * as mymodule from 'newtest';
let s:mymodule.HelloWorld = new mymodule.HelloWorld();
创建对类型的本地变量引用:
import * as mymodule from 'newtest';
const HelloWorld = mymodule.HelloWorld;
let s = new HelloWorld();
答案 1 :(得分:0)
我想我找到了答案。在我的示例中,声明模块“newtest”表示导出的nodejs对象。由于导出的对象已经是HelloWorld对象,因此在另一个类HelloObject中定义是错误的。 因此,最简单的解决方案是使用nodejs代码,如:
element.style {
height: 440px;
-touch-action: pan-y;
-webkit-user-drag: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
这样我们就可以导出一个内部有HelloWorld类的对象。这修复了编译和编译的JS。
我在声明文件“newtest”中的另一个问题必须是引号。只有这样它才能将模块附加到nodejs包。
这些修复解决了我的问题。但问题仍然存在。如果我仍然需要使用“module.exports = HelloWorld;”怎么办?在这种情况下我应该如何声明这个模块?