node-java typescript import

时间:2013-03-10 03:26:43

标签: node.js typescript

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

然而,

var java = require("java");

不能用打字稿方式工作,也

import java = module("java");

不能正常工作。

我知道我们可能需要一个定义文件等,并且有一个类似的项目 https://github.com/borisyankov/DefinitelyTyped

话虽如此,我认为这样做太复杂了。

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

2 个答案:

答案 0 :(得分:1)

最好的方法是使用node-java API的定义文件,但是,使用您的第一个代码段:

var java = require("java");

您可以使用对this node typing的引用,如下所示:

/// <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");

您需要一个定义文件。要快速启动,您可以使用以下代码创建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');

有时间,我会向DefinitelyTyped存储库发送node-java定义。

答案 1 :(得分:0)

当你说这不起作用时:

var java = require("java");

我假设您直接调用require时遇到错误,因为它没有类型信息。

解决此问题的一种方法是为require添加类型信息:

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

这是一个简单的示例 - java将不会被输入,因为我的示例中的require的返回值为any - 但如果您有类型信息,则可以将其转换为:

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