2013-03-10 53 views
1

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

然而,

var java = require("java"); 

不打字稿的工作方式,也

import java = module("java"); 

,因为它是不工作。

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

话虽如此,我认为这是太复杂自己做的一个项目。

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

+0

你用什么模块加载器? RequireJS? – thomaux 2013-03-11 09:14:15

+0

@Anzeo node.js有一个内置的模块加载器。 – Fenton 2013-03-11 10:17:47

+1

@SteveFenton Doh! :) – thomaux 2013-03-20 12:35:02

回答

2

的最好方法是使用一个定义文件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'); 

有时间,我会发一个node-java定义DefinitelyTyped库。

+1

Diullei,非常有帮助的教程,谢谢。我将实施你的建议。赞赏。 – 2013-03-14 04:21:25

1

当你说这不起作用:

var java = require("java"); 

我假设你直接调用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'); 
+1

谢谢,史蒂夫。实际上,您对“声明/要求”方法的建议是我一直在寻找的,并且非常翔实。 – 2013-03-14 04:15:10