我有一个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()
等。
您可以使用typescript-generator作为larslonne提及。它可以生成从Java JSON类打字稿接口。某些功能可能对您有用:
下面是例子,如何从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
。
编辑:我是打字稿发电机的作者。
我曾与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的正则表达式我目前正在与相同的设置你的项目:一个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应用程序,这是不理想,但它是一个很小的代价为自动生成的定义文件。
我创建了一个新的项目,其目标是保持尽可能transpiling过程一样简单:JavaModel-Converter
它的工作原理与IDE或简单地通过执行本罐子成DIST文件夹的命令行。
所有你需要的是把你的Java模型中所需的文件夹,并开始transpile过程。
我还添加了折角样式的支持。
让我们打开的问题,如果你有要求!
理论上我的项目是一个普通的Java模型转换器,但实际上,只有打字稿transpile支持
因此,我想找到一些工具,它能够(通过反射API?)从Java接口声明转化为相关的打字稿接口。
你可以先看看these samples。我没口的java - >打字稿功能独立的CLI工具(从整个项目),但它是很容易做到这一点。
您可以使用Script4J这是一组库使用Java API的打字稿的代码。虽然这是一个新项目,它可以是有用的。