acacode / swagger-typescript-api

Generate the API Client for Fetch or Axios from an OpenAPI Specification

Home Page:https://acacode.github.io/swagger-typescript-api/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Non generic syntax for generating types with discriminators

martitv opened this issue · comments

I am generating zod schemas based on types generated by swagger-typescript-api. The schema generation doesn't work well with generics so I was wondering if it would be possible to have an alternative way of generating types with discriminators?

Today, this is the syntax it seems:

export type Value = BaseValue &
  (
    | BaseValueTypeMapping<"Type1", Value1>
    | BaseValueTypeMapping<"Type2", Value2>
    | BaseValueTypeMapping<"Type3", Value3>;

export type Value1 = BaseValue;

export type Value2 = BaseValue ;

export type Value3 = BaseValue ;

interface BaseValue {
  $type: string;
  value: number;
}
    
type BaseValueTypeMapping<Key, Type> = {
  $type: Key;
} & Type;

It would be nice if it was possible to just generate the types with discriminators like so:

export type Value = BaseValue &
  (
    | Value1 
    | Value2 
    | Value3 ;

export type Value1 = BaseValue & {
  $type: "Type1"
};

export type Value2 = BaseValue & {
  $type: "Type2"
};

export type Value3 = BaseValue & {
  $type: "Type3"
};

interface BaseValue {
  $type: string;
  value: number;
}

Is this possible?

Thanks