Skip to content

Commit 9c4f1ad

Browse files
marcindobrydomoritz
authored andcommitted
Fix using enum values in interfaces (YousefED#123)
* Fix using enum values in interfaces * Compact the enum members assignment
1 parent b1d3695 commit 9c4f1ad

File tree

4 files changed

+35
-4
lines changed

4 files changed

+35
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export enum A {
2+
B,
3+
C,
4+
D,
5+
};
6+
7+
export interface MyObject {
8+
code: A.B;
9+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-04/schema#",
3+
"definitions": {
4+
"A.B": {
5+
"enum": [
6+
0
7+
],
8+
"type": "number"
9+
}
10+
},
11+
"properties": {
12+
"code": {
13+
"$ref": "#/definitions/A.B"
14+
}
15+
},
16+
"required": [
17+
"code"
18+
],
19+
"type": "object"
20+
}

test/schema.test.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ describe("schema", () => {
8787
assertSchema("enums-number-initialized", "main.ts", "Enum");
8888
assertSchema("enums-compiled-compute", "main.ts", "Enum");
8989
assertSchema("enums-mixed", "main.ts", "MyObject");
90+
assertSchema("enums-value-in-interface", "main.ts", "MyObject");
9091
assertSchema("string-literals", "main.ts", "MyObject");
9192
assertSchema("string-literals-inline", "main.ts", "MyObject");
9293

@@ -111,7 +112,7 @@ describe("schema", () => {
111112
assertSchema("imports", "main.ts", "MyObject");
112113

113114
assertSchema("extra-properties", "main.ts", "MyObject");
114-
115+
115116
assertSchema("generate-all-types", "main.ts", "*");
116117

117118
/**

typescript-json-schema.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -361,8 +361,9 @@ export class JsonSchemaGenerator {
361361
private getEnumDefinition(clazzType: ts.Type, tc: ts.TypeChecker, definition: Definition): Definition {
362362
const node = clazzType.getSymbol().getDeclarations()[0];
363363
const fullName = tc.typeToString(clazzType, undefined, ts.TypeFormatFlags.UseFullyQualifiedType);
364-
const enm = <ts.EnumDeclaration>node;
365-
364+
const members: ts.EnumMember[] = node.kind === ts.SyntaxKind.EnumDeclaration ?
365+
(node as ts.EnumDeclaration).members :
366+
[node as ts.EnumMember];
366367
var enumValues: (number|boolean|string|null)[] = [];
367368
let enumTypes: string[] = [];
368369

@@ -372,7 +373,7 @@ export class JsonSchemaGenerator {
372373
}
373374
};
374375

375-
enm.members.forEach(member => {
376+
members.forEach(member => {
376377
const caseLabel = (<ts.Identifier>member.name).text;
377378
const constantValue = tc.getConstantValue(member);
378379
if (constantValue !== undefined) {

0 commit comments

Comments
 (0)