represent swagger enums as union of literal types (#6233)

* represent swagger enums as union of literal types

enabling their easy use in angular templates, structural subtyping
among enums (in particular, different instances of the same enum
are now mutually assignable), improving type safety by preventing
incorrect widening, and permitting numeric enum values
(albeit without descriptive names)

Fixes #6206, #5146, #3500

* update samples

* restore blank lines at end of file

* fix typo
This commit is contained in:
Adrian Moos 2017-10-07 15:42:46 +02:00 committed by wing328
parent cc756b5563
commit eab9c72a42
10 changed files with 13 additions and 55 deletions

View File

@ -1,7 +1,2 @@
export enum {{classname}} {
{{#allowableValues}}
{{#enumVars}}
{{{name}}} = <any> {{{value}}}{{^-last}},{{/-last}}
{{/enumVars}}
{{/allowableValues}}
}
export type {{classname}} = {{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}} | {{/-last}}{{/enumVars}}{{/allowableValues}};

View File

@ -16,13 +16,8 @@ export interface {{classname}} {{#parent}}extends {{{parent}}} {{/parent}}{
export namespace {{classname}} {
{{#vars}}
{{#isEnum}}
export enum {{enumName}} {
{{#allowableValues}}
{{#enumVars}}
{{{name}}} = <any> {{{value}}}{{^-last}},{{/-last}}
{{/enumVars}}
{{/allowableValues}}
}
export type {{enumName}} = {{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}} | {{/-last}}{{/enumVars}}{{/allowableValues}};
{{/isEnum}}
{{/vars}}
}{{/hasEnums}}
}{{/hasEnums}}

View File

@ -33,9 +33,5 @@ export interface Order {
}
export namespace Order {
export enum StatusEnum {
Placed = <any> 'placed',
Approved = <any> 'approved',
Delivered = <any> 'delivered'
}
export type StatusEnum = 'placed' | 'approved' | 'delivered';
}

View File

@ -35,9 +35,5 @@ export interface Pet {
}
export namespace Pet {
export enum StatusEnum {
Available = <any> 'available',
Pending = <any> 'pending',
Sold = <any> 'sold'
}
export type StatusEnum = 'available' | 'pending' | 'sold';
}

View File

@ -33,9 +33,5 @@ export interface Order {
}
export namespace Order {
export enum StatusEnum {
Placed = <any> 'placed',
Approved = <any> 'approved',
Delivered = <any> 'delivered'
}
export type StatusEnum = 'placed' | 'approved' | 'delivered';
}

View File

@ -35,9 +35,5 @@ export interface Pet {
}
export namespace Pet {
export enum StatusEnum {
Available = <any> 'available',
Pending = <any> 'pending',
Sold = <any> 'sold'
}
export type StatusEnum = 'available' | 'pending' | 'sold';
}

View File

@ -33,9 +33,5 @@ export interface Order {
}
export namespace Order {
export enum StatusEnum {
Placed = <any> 'placed',
Approved = <any> 'approved',
Delivered = <any> 'delivered'
}
export type StatusEnum = 'placed' | 'approved' | 'delivered';
}

View File

@ -35,9 +35,5 @@ export interface Pet {
}
export namespace Pet {
export enum StatusEnum {
Available = <any> 'available',
Pending = <any> 'pending',
Sold = <any> 'sold'
}
export type StatusEnum = 'available' | 'pending' | 'sold';
}

View File

@ -33,9 +33,5 @@ export interface Order {
}
export namespace Order {
export enum StatusEnum {
Placed = <any> 'placed',
Approved = <any> 'approved',
Delivered = <any> 'delivered'
}
export type StatusEnum = 'placed' | 'approved' | 'delivered';
}

View File

@ -35,9 +35,5 @@ export interface Pet {
}
export namespace Pet {
export enum StatusEnum {
Available = <any> 'available',
Pending = <any> 'pending',
Sold = <any> 'sold'
}
export type StatusEnum = 'available' | 'pending' | 'sold';
}