У меня есть серверное приложение Java, которое использует Jackson для генерации сериализации 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 GET из моего приложения TypeScript, которое основано на AngularJS:
$http.get("http://localhost/books/0743273567")
.success((book: Book) => { ... });
Чтобы я мог использовать строго типизированный характер TypeScript, я обнаружил, что кодирую следующий интерфейс TypeScript:
module com.acme.library {
export interface Book {
author: com.acme.library.Author;
title: String;
}
}
В результате я должен поддерживать две копии этого же интерфейса, что в лучшем случае является громоздким. Это особенно неприятно, так как я хотел бы иметь те же комментарии javadoc/jsdoc на обоих интерфейсах, что подразумевает целую кучу copy & paste.
Я хотел бы найти механизм для автоматизации этого процесса.
Java - это мой основной язык разработки. Таким образом, я хотел бы найти инструмент, способный конвертироваться из декларации интерфейса Java (через API отображения) в соответствующий интерфейс TypeScript.
Единственным инструментом, который я обнаружил в этом домене, является пакет NPM ts-java
. Однако, это слишком тяжело для моего случая использования. Он добавляет методы из иерархии объектов в каждый интерфейс, например. hashCode()
, wait()
, getClass()
и т.д.