从Java接口生成Typescript接口

jwa*_*jwa 25 java typescript

我有一个Java服务器应用程序,它使用Jackson通过反射API一般地序列化DTO.例如,对于此DTO界面:

package com.acme.library;
public interface Book { 
  com.acme.library.Author getAuthor();
  String getTitle();
}
Run Code Online (Sandbox Code Playgroud)

从这个界面的POJO实现,Jackson将一般序列化以下实体:

{
   "author": { "name": "F. Scott Fitzgerald"},
   "title": "The Great Gatsby"
}
Run Code Online (Sandbox Code Playgroud)

将使用我的TypeScript应用程序(基于AngularJS)的HTTP GET接收此有效负载:

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

因此我能够使用TypeScript的强类型性质,我发现自己手工编写以下的typescript接口:

module com.acme.library {
  export interface Book {
      author: com.acme.library.Author;
      title: String;
  }
}
Run Code Online (Sandbox Code Playgroud)

因此,我必须保留这个相同界面的两个副本 - 这最多是麻烦的.这变得特别讨厌,因为我想在两个接口上都有相同的javadoc/jsdoc注释,这涉及整个复制和粘贴堆.


我想找到一种自动化这个过程的机制.

Java是我的主要开发语言.因此,我想找到一些能够从Java接口声明(通过反射API?)转换到相关TypeScript接口的工具.

我在这个领域发现的唯一工具是NPM包ts-java.但是,这对我的用例来说太重了.它增加了从对象层次结构的方法给每个接口,例如hashCode(),wait(),getClass()等.

Voj*_*jta 18

你可以使用typescript -generator作为larslonne.它从Java JSON类生成TypeScript接口.您可能会发现一些有用的功能:

  • Maven和Gradle插件(也可以直接从Java调用)
  • 杰克逊1和杰克逊2
  • 集合,枚举,继承,泛型
  • Javadoc对JSDoc注释发表评论
  • 详细文档(README,Wiki,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>
Run Code Online (Sandbox Code Playgroud)

编辑:使用mvn process-classes或使用后续阶段运行它mvn install.
您还可以<configuration>向上拉两个级别并运行mvn typescript-generator:generate.

编辑:我是typescript-generator的作者.


lal*_*alo 3

我目前正在开发一个与您的设置相同的项目:Java API 和 Typescript Web 应用程序。

我们在构建 API 时使用cz.habarta.typescript-generator.typescript-generator-maven-plugin它来生成文件。.d.ts然后将定义文件打包为工件<type>d.ts</type>,使用org.codehaus.mojo.build-helper-maven-plugin. 最后,该工件作为 Web 应用程序中的依赖项导入,其中定义文件将解压到目录中target

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