节点-java打印脚本导入

我需要在我的打字稿项目中使用node-java node_module。

然而,

var java = require("java"); 

在打字方式中不起作用,而且

 import java = module("java"); 

不能正常工作。

我知道我们可能需要一个定义文件等,有一个像https://github.com/borisyankov/DefinitelyTyped

说了这么多,我觉得自己做起来太复杂了。

有没有更简单的解决方法? 谢谢。

最好的方法是使用定义文件到node-java API,然而,使用你的第一个代码片段:

 var java = require("java"); 

你可以使用这个节点的引用,如下所示:

 /// <reference path="node/node.d.ts" /> var java = require("java"); java.classpath.push("commons-lang3-3.1.jar"); java.classpath.push("commons-io.jar"); var list = java.newInstanceSync("java.util.ArrayList"); java.newInstance("java.util.ArrayList", function(err, list) { list.addSync("item1"); list.addSync("item2"); }); var ArrayList = java.import('java.util.ArrayList'); var list2 = new ArrayList(); list.addSync('item1'); 

要使用第二个片段:

 import java = module("java"); 

你将需要一个定义文件。 一开始你可以用下面的代码创build一个node-java.d.ts文件:

 module "java" { export var classpath: { push(jar: string); }; export function newInstanceSync(type: string); export function newInstance(type: string, callback: (err, list) => any); export function import(type: string); export function newArray(...item: any[]); export function callStaticMethodSync(...args: any[]); } 

并使用这个文件如下:

 /// <reference path="node-java.d.ts" /> import java = module("java"); java.classpath.push("commons-lang3-3.1.jar"); java.classpath.push("commons-io.jar"); var list = java.newInstanceSync("java.util.ArrayList"); java.newInstance("java.util.ArrayList", function(err, list) { list.addSync("item1"); list.addSync("item2"); }); var ArrayList = java.import('java.util.ArrayList'); var list2 = new ArrayList(); list.addSync('item1'); 

有时间的话,我会发一个node-java定义给DefinitelyTyped的存储库。

当你说这不起作用:

 var java = require("java"); 

我假设你直接调用require的错误,因为它没有types信息。

解决这个问题的一种方法是为require添加types信息:

 declare var require: (module: string) => any; var java = require('java'); 

这是一个简单的例子 – 在我的示例中, java不会被键入为require的返回值,但是如果您有types信息,则可以将其转换为:

 declare var require: (module: string) => any; var java = <JavaDefinition> require('java');