生成Java接口打字稿接口

问题描述 投票:21回答:6

我有一个Java服务器应用程序,它使用杰克逊一般连载DTO的使用反射API。例如,对于这个DTO接口:

package com.acme.library;
public interface Book { 
  com.acme.library.Author getAuthor();
  String getTitle();
}

从POJO实现这个接口,杰克逊将一般连载以下实体:

{
   "author": { "name": "F. Scott Fitzgerald"},
   "title": "The Great Gatsby"
}

该有效载荷将使用HTTP从我的打字稿的应用程序,这是AngularJS基于GET可以收到:

$http.get("http://localhost/books/0743273567")
   .success((book: Book) => { ... });

所以,我能够使用打字稿的强类型的性质,我发现自己的手编以下打字稿接口:

module com.acme.library {
  export interface Book {
      author: com.acme.library.Author;
      title: String;
  }
}

其结果是,我要保持这种同一个接口的两个副本 - 这是麻烦的最好的。这得到特别讨厌,因为我想有两个接口,其中涉及的复制和粘贴整个堆相同的javadoc / jsdoc意见。


我想找到一种机制,自动化这个过程。

Java是我的主要开发语言。因此,我想找到一些工具,它能够(通过反射API?)从Java接口声明转化为相关的打字稿接口。

我已经在这个领域发现的唯一工具是故宫包ts-java。然而,这是太重量级的我的用例。它增加了从对象分层结构中的方法的每个接口,例如hashCode()wait()getClass()等。

java typescript
6个回答
17
投票

您可以使用typescript-generator作为larslonne提及。它可以生成从Java JSON类打字稿接口。某些功能可能对您有用:

  • Maven和摇篮插件(也可以从Java直接调用的)
  • 杰克逊1和2杰克逊
  • 集合,枚举,继承,泛型
  • javadoc注释来JSDoc评论
  • 详细的文档(自述,维基,Maven插件)
  • 在Maven的中央回购释放

下面是例子,如何从Maven的使用它:

<plugin>
    <groupId>cz.habarta.typescript-generator</groupId>
    <artifactId>typescript-generator-maven-plugin</artifactId>
    <version>1.25.322</version>
    <executions>
        <execution>
            <id>generate</id>
            <goals>
                <goal>generate</goal>
            </goals>
            <phase>process-classes</phase>
            <configuration>
                <jsonLibrary>jackson2</jsonLibrary>
                <classes>
                    <class>com.acme.library.Book</class>
                </classes>
                <outputFile>target/rest.d.ts</outputFile>
                <outputKind>module</outputKind>
            </configuration>
        </execution>
    </executions>
</plugin>

编辑:运行它使用mvn process-classes或使用后期像mvn install。 您也可以拉<configuration>元两个级别和运行mvn typescript-generator:generate

编辑:我是打字稿发电机的作者。


3
投票

我曾与Amdatu TypeScript Generator很大的运气

它可以在摇篮或独立从终端中运行(我使用的终端,所以这就是这里这些指令)

简单地克隆回购协议,运行./gradlew来构建它。

为了执行它,我因为当时在罐子里没有入口点(如果使用gradle这个构建你不会有这个问题,因为这会指定入门级)偏离一点从他们的指导。

我用了:

java -cp build/libs/org.amdatu.typescriptgenerator-1.0-SNAPSHOT.jar org.amdatu.typescriptgenerator.standalone.TypeScriptGeneratorStarter

然后,它应该抱怨说,没有一个typescript.settings.json文件,该公司预计,在目录中,您正在运行的命令。

我会包括我自己的例子,因为链接回购的例子设置文件是有点不清楚:

{
  "folder" : "/projectsfolder/project",
  "classFolder" : "target/classes",
  "output" : "typscriptOutputDirectory",
  "baseFolder" : "",
  "clearOutput" : false,
  "packages" : [
    ".*regexforwhatpackagesinsidetargetprojectshouldbeturnedintotypescript.*"
  ],
  "excludePackages" : [ ],
  "excludePattern" : [ ],
  "types" : { },
  "mapping" : { },
  "enumType" : "class",
  "classType" : "interface",
  "classPath" : [ ]
}

在设置中最重要的领域是:

  • folder是你已建项目
  • classFolder就是这台发电机会看该文件夹内的编译的Java类
  • output是在打字稿定义文件将被放置的目录,相对你在哪里执行发电机
  • packages是什么包应该变成打字稿定义一个java的正则表达式

2
投票

我目前正在与相同的设置你的项目:一个Java API和一个打字稿Web应用程序。

我们使用cz.habarta.typescript-generator.typescript-generator-maven-plugin时,我们所建立的API生成.d.ts文件。然后,定义文件打包为<type>d.ts</type>一个神器,使用org.codehaus.mojo.build-helper-maven-plugin。最后,神器导入为Web应用程序的依赖关系,其中定义文件解压缩到target目录。

此设置要求使用Maven的Web应用程序,这是不理想,但它是一个很小的代价为自动生成的定义文件。


1
投票

我创建了一个新的项目,其目标是保持尽可能transpiling过程一样简单:JavaModel-Converter

它的工作原理与IDE或简单地通过执行本罐子成DIST文件夹的命令行。

所有你需要的是把你的Java模型中所需的文件夹,并开始transpile过程。

我还添加了折角样式的支持。

让我们打开的问题,如果你有要求!

理论上我的项目是一个普通的Java模型转换器,但实际上,只有打字稿transpile支持


0
投票

因此,我想找到一些工具,它能够(通过反射API?)从Java接口声明转化为相关的打字稿接口。

你可以先看看these samples。我没口的java - >打字稿功能独立的CLI工具(从整个项目),但它是很容易做到这一点。


0
投票

您可以使用Script4J这是一组库使用Java API的打字稿的代码。虽然这是一个新项目,它可以是有用的。

© www.soinside.com 2019 - 2024. All rights reserved.