节点-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');