uniforms icon indicating copy to clipboard operation
uniforms copied to clipboard

When I use discriminator, I am getting an error where it can't find the specific field

Open davidli108 opened this issue 8 months ago • 1 comments

Versions: uniforms: ^3.10.1 uniforms-mui: ^3.10.1

type A1 = {
  id_type: 'a1';
  id: string;
};
type A2 = {
  id_type: 'a2';
  id: string;
};
type C = {
  name: string;
  address: string;
}

type A1c = A1 & C
type A2c = A2 & C

/**
 * @discriminator id_type
 */
export type A = A1c | A2c

When i generate the json schema from this typescript, the json is

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$ref": "#/definitions/A",
  "definitions": {
    "A": {
      "type": "object",
      "discriminator": {
        "propertyName": "id_type"
      },
      "required": [
        "id_type"
      ],
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string"
            },
            "address": {
              "type": "string"
            },
            "id_type": {
              "type": "string",
              "const": "a1"
            },
            "id": {
              "type": "string"
            }
          },
          "required": [
            "address",
            "id",
            "id_type",
            "name"
          ]
        },
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string"
            },
            "address": {
              "type": "string"
            },
            "id_type": {
              "type": "string",
              "const": "a2"
            },
            "id": {
              "type": "string"
            }
          },
          "required": [
            "address",
            "id",
            "id_type",
            "name"
          ]
        }
      ]
    }
  }
}

In this case, I am getting an error and it says it cannot find the "name" or "address" field in A As you can see, A has "type": "object" inside of it and oneOf property also has "type": "object" in each property. When i deleted the first "type": "object", I didn't see the error.

Can you please check?

davidli108 avatar Jul 02 '24 17:07 davidli108