我需要在我的打字稿项目中使用node-java node_module。
然而,
var java = require("java");
不能以打字稿方式工作,而且
import java = module("java");
不能按原样工作。
我知道我们可能需要一个定义文件等,并且有一个像 https://github.com/borisyankov/DefinitelyTyped这样的项目
话虽如此,我认为自己做起来太复杂了。
有没有更简单的解决方法?谢谢。
我需要在我的打字稿项目中使用node-java node_module。
然而,
var java = require("java");
不能以打字稿方式工作,而且
import java = module("java");
不能按原样工作。
我知道我们可能需要一个定义文件等,并且有一个像 https://github.com/borisyankov/DefinitelyTyped这样的项目
话虽如此,我认为自己做起来太复杂了。
有没有更简单的解决方法?谢谢。
最好的方法是使用node-javaAPI 的定义文件,但是,使用您的第一个代码片段:
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");
您将需要一个定义文件。首先,您可以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因为它没有类型信息。
解决此问题的一种方法是为 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');