2013-03-10 2 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

+0

@Anzeo node.js имеет встроенный загрузчик модулей. – Fenton

+1

@SteveFenton Doh! :) – thomaux

ответ

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, спасибо за очень полезный учебник. Я собираюсь реализовать ваше предложение. Оценил. –

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

Спасибо, Стив. На самом деле, ваше предложение для метода -declare/require - это тот, который я искал, и очень информативный. –

Смежные вопросы