首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node-java typescript导入

node-java typescript导入
EN

Stack Overflow用户
提问于 2013-03-10 11:26:43
回答 2查看 2.7K关注 0票数 1

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

然而,

代码语言:javascript
复制
var java = require("java");

不能以typescript方式工作,而且

代码语言:javascript
复制
import java = module("java");

不能按原样工作。

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

话虽如此,我认为我自己做这件事太复杂了。

有没有更简单的变通方法?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-11 19:38:36

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

代码语言:javascript
复制
var java = require("java");

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

代码语言:javascript
复制
/// <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');

要使用第二段代码,请执行以下操作:

代码语言:javascript
复制
import java = module("java");

您将需要一个定义文件。首先,您可以使用以下代码创建一个node-java.d.ts文件:

代码语言:javascript
复制
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[]);
}

并按如下方式使用此文件:

代码语言:javascript
复制
/// <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
EN

Stack Overflow用户

发布于 2013-03-11 18:21:48

当你说这不起作用的时候:

代码语言:javascript
复制
var java = require("java");

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

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

代码语言:javascript
复制
declare var require: (module: string) => any;
var java = require('java');

这是一个简单的例子-在我的例子中,java不会被类型化,因为require的返回值是any -但是如果你有类型信息,你可以转换它:

代码语言:javascript
复制
declare var require: (module: string) => any;
var java = <JavaDefinition> require('java');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15318566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档