Если вы разрабатываете серверную часть с помощью Java, а интерфейс – с помощью TypeScript, скорее всего, вам могут потребоваться одни и те же классы/интерфейсы DTO на обоих концах.
В этом случае, разве не было бы здорово, если бы мы могли определить классы TO в бэкэнде и автоматически генерировать классы Typescript.
Благодаря typescript-generator нам просто нужно настроить плагин maven или создать задачу Gradle.
Для Maven
Добавьте следующий плагин в свой pom-файл
cz.habarta.typescript-generator typescript-generator-maven-plugin 2.24.612 generate generate process-classes jackson2 com.example.demo.dto.CompanyDto target/company.ts module implementationFile asClasses asEnum true useLibraryDefinition
Когда вы запустите ./mvn clean install
, сгенерированный файл TypeScript будет доступен в target/company.ts
Для Gradle
Настройте плагин и создайте задачу
apply plugin: 'cz.habarta.typescript-generator' buildscript { repositories { mavenCentral() jcenter() } dependencies { classpath group: 'cz.habarta.typescript-generator', name: 'typescript-generator-gradle-plugin', version: '2.24.612' } } generateTypeScript { jsonLibrary = 'jackson2' classes = [ 'com.example.demo.dto.CompanyDto' ] outputFile = 'build/company.ts' outputKind = 'module' outputFileType = 'implementationFile' mapClasses = 'asClasses' mapEnum = 'asEnum' nonConstEnums = true optionalProperties = 'useLibraryDefinition' }
Вы можете запустить задачу Gradle вручную: ./gradlew сгенерировать TypeScript
или создать другую задачу в вашей цепочке сборки в зависимости от нее. [1]
В приведенном выше примере я добавил следующие конфигурации, чтобы переопределить поведение по умолчанию.
выходной файл
: Путь и имя сгенерированного файла TypeScript.тип выходного файла
: Формат выходного файла, может быть:файл декларации
(.d.ts)файл реализации
(.ts)
сопоставление классов
: Указывает, будут ли классы Java сопоставляться классам или интерфейсам TypeScript. Поддерживаемые значения::как интерфейсы
как Классы
сопоставить перечисление
: Указывает, как будут сопоставляться перечисления. Поддерживаемые значения::as Union
– создает псевдоним типа для объединения значений строкового перечисленияas Inline Union
– создает объединение значений перечисления в местах, где используется перечислениеasEnum
– создает строковое перечисление. Требуется TypeScript 2.4как перечисление на основе чисел
– создает перечисление именованных числовых значений
неконстантные перечисления
: Если true, сгенерированные перечисления не будут иметь ключевого слова const. Это может быть использовано только в файлах реализациинеобязательные свойства
: Определяет, как свойства определяются как необязательные. Поддерживаемые значения::использовать указанные аннотации
– аннотации, указанные с помощьюнеобязательных аннотаций
илиТребуемых аннотаций
параметраиспользуйте определение библиотеки
– примеры:@JsonProperty(обязательно)
при использовании библиотеки jackson 2 или@XmlElement(обязательно)
при использовании библиотеки jaxbвсе
– все свойства являются необязательными
Подробнее о настройке typescript-generator-maven-plugin
плагина читайте в документации по конфигурации
Пример с maven можно найти здесь, на GitHub .
Оригинал: “https://dev.to/vuongddang/generate-typescript-from-java-2hb8”