bcherny/json-schema-to-typescript

allOf, oneOf dont correctly generate types

Open

#381 opened on Apr 13, 2021

View on GitHub
 (8 comments) (16 reactions) (0 assignees)TypeScript (449 forks)github user discovery
buggood first issuehelp wanted

Repository metrics

Stars
 (3,302 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

The following schema:

        "Test": {
            "type": "object",
            "properties": {
                "prop1": { "type": "string" },
                "prop2": { "type": "string" },
                "prop3": { "type": "string"},
                "prop4": { 
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "minItems": 1
                },
                "prop5": { "type": "string" },
                "prop6": { "type": "string" }
            },
            "allOf": [
                { "required": [ "prop1" ] },
                {
                    "oneOf": [
                        { "required": [ "prop2" ] },
                        { "required": [ "prop3" ] },
                        { "required": [ "prop4" ] },
                        { "required": [ "prop5" ] },
                        { "required": [ "prop6" ] }
                    ]
                }
            ],
            "additionalProperties": false
        }

Generates type:

type Test = {
    [k: string]: unknown;
} & (
    | {
          [k: string]: unknown;
      }
    | {
          [k: string]: unknown;
      }
    | {
          [k: string]: unknown;
      }
    | {
          [k: string]: unknown;
      }
    | {
          [k: string]: unknown;
      }
);

Expected type:

type Test = {
    prop1: string;
} & (
    { prop2: string } |
    { prop3: string } |
    { prop4: string[] } |
    { prop5: string } |
    { prop6: string }
);

Contributor guide