Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Usage of moduleDependencies breaks typing of map of enum and repeat inherited fields #999

Open
CedricMtta opened this issue Jul 14, 2023 · 0 comments

Comments

@CedricMtta
Copy link

Hello,

FIrst of all, thanks for this project, it is much appreciated.

I may have missed the solution to my problem in the doc, but here is my issue:

I am using typescript-generator version 3.2.1263 with gradle.

I created one gradle sub module named "common-generator" that aims to create a file with common typescript classes enums for our front-end.

I defined for it the following configuration:

generateTypeScript {
  jsonLibrary = 'jackson2'
  classes = [
    ...
  ]
  outputKind = 'module'
  outputFileType = 'implementationFile'
  outputFile = '../<front end path>/common/models/common-backend.model.ts'
  generateInfoJson = 'true'
  noFileComment = 'true'
  sortDeclarations = 'true'
  sortTypeDeclarations = 'true'
  excludeClasses = [
    'java.io.Serializable',
    'org.springframework.data.util.Streamable',
    'org.springframework.data.domain.Chunk'
  ]
  mapEnum = 'asEnum'
  nonConstEnums = 'true'
  requiredAnnotations = ['javax.validation.constraints.NotNull']
}

So far so good, I obtain the expected common-backend.model.ts.
That is to say, I have some java fields defined as EnumMap

private Map<Language, String> synonymLabels;

that are well typed in typescript

synonymLabels?: { [P in Language]?: string };

Then, I created another gradle sub module named "businessA-generator" that aims to create a file with specific typescript classes for one of our front-end module.

I defined for it the following configuration:

generateTypeScript {
  jsonLibrary = 'jackson2'
  classes = [
...
  ]
  outputKind = 'module'
  outputFileType = 'implementationFile'
  outputFile = '../<front end path>/businessA/models/businessA-backend.model.ts'
  noFileComment = 'true'
  sortDeclarations = 'true'
  sortTypeDeclarations = 'true'
  moduleDependencies = [
    cz.habarta.typescript.generator.ModuleDependency.module('@shared/common/models/common-backend.model', 'common', new File('<front end path>/common/models/typescript-generator-info.json'), null, null)
  ]
  excludeClasses = [
    'java.io.Serializable',
    'org.springframework.data.util.Streamable'
  ]
  mapEnum = 'asEnum'
  nonConstEnums = 'true'
  requiredAnnotations = ['javax.validation.constraints.NotNull']
}

Here comes my issue.
Map of enums are now typed like this:

synonymLabels?: { [index: string]: string };

Whereas I would have expected:

synonymLabels?: { [P in common.Language]: string };

Other issue, but less impactful, in case of inheritance, the properties of the mother class are repeated.
For instance, the following java code

public interface Taggable {
  TagListDto getTagListDto();
}

public class OutComeTagGroup implements Taggable {

  private List<String> otherTags = new ArrayList<>();
  private List<String> resultCategoryTags = new ArrayList<>();
public TagListDto getTagListDto() {...}
}

Is generated into

(from common file)
export interface Taggable {
    tagListDto?: TagListDto;
}

(from another business file)
export interface OutComeTagGroup extends common.Taggable {
    otherTags?: string[];
    resultCategoryTags?: string[];
    tagListDto?: common.TagListDto;
}

Whereas I would expect

export interface OutComeTagGroup extends common.Taggable {
    otherTags?: string[];
    resultCategoryTags?: string[];
}

Inheritance taking place in the same typescript generated file doesn't have this issue.

Have I missed something in the plugin configuration, or is there an issue in typescript-generator ?

Thanks in advance for your help.

I wish you a nice day :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant