【问题标题】:node-java typescript import节点 java 打字稿导入
【发布时间】:2013-02-25 10:44:54
【问题描述】:

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

然而,

var java = require("java");

不能以打字稿的方式工作,而且

import java = module("java");

不能按原样工作。

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

话虽如此,我觉得自己做起来太复杂了。

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

【问题讨论】:

  • 你使用什么作为模块加载器?需要JS?
  • @Anzeo node.js 有一个内置的模块加载器。

标签: node.js typescript


【解决方案1】:

当你说这行不通时:

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');

【讨论】:

  • 谢谢,史蒂夫。实际上,您对 -declare/require 方法的建议是我一直在寻找的,而且信息量很大。
【解决方案2】:

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

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');

使用第二个sn-p:

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 存储库。

【讨论】:

  • Diullei,感谢您提供非常有用的教程。我将执行您的建议。赞赏。
猜你喜欢
  • 2022-01-14
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 2017-02-21
  • 2021-12-05
  • 2020-04-19
相关资源
最近更新 更多