From b97bd9f8c358eb2fb10ec95046478b550f9413a1 Mon Sep 17 00:00:00 2001 From: Max Okorokov Date: Fri, 10 Jan 2020 12:01:28 +0100 Subject: [PATCH] chore: parse complex union types like `'foo' | string` correctly for documentation --- misc/api-doc-test-cases/interface-with-properties.ts | 2 +- misc/api-doc.spec.ts | 4 ++-- misc/api-doc.ts | 8 +++++++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/misc/api-doc-test-cases/interface-with-properties.ts b/misc/api-doc-test-cases/interface-with-properties.ts index 41b6d0010b..f3f319f93a 100644 --- a/misc/api-doc-test-cases/interface-with-properties.ts +++ b/misc/api-doc-test-cases/interface-with-properties.ts @@ -16,5 +16,5 @@ export interface NgbModalOptions { /** * Size of a new modal window. */ - size?: 'sm' | 'lg' | 'xl'; + size?: 'sm' | 'lg' | 'xl' | string; } diff --git a/misc/api-doc.spec.ts b/misc/api-doc.spec.ts index ff5a69bd30..ee2aeb87a1 100644 --- a/misc/api-doc.spec.ts +++ b/misc/api-doc.spec.ts @@ -171,7 +171,7 @@ describe('APIDocVisitor', () => { expect(interfaceDocs.properties[0].name).toBe('backdrop'); expect(interfaceDocs.properties[0].description) .toContain('Weather a backdrop element should be created for a given modal (true by default).'); - expect(interfaceDocs.properties[0].type).toBe('boolean | "static"'); + expect(interfaceDocs.properties[0].type).toBe(`boolean | 'static'`); expect(interfaceDocs.properties[0].defaultValue).toBeUndefined(); expect(interfaceDocs.properties[1].name).toBe('keyboard'); @@ -182,7 +182,7 @@ describe('APIDocVisitor', () => { expect(interfaceDocs.properties[2].name).toBe('size'); expect(interfaceDocs.properties[2].description).toBe('

Size of a new modal window.

'); - expect(interfaceDocs.properties[2].type).toBe('"sm" | "lg" | "xl"'); + expect(interfaceDocs.properties[2].type).toBe(`'sm' | 'lg' | 'xl' | string`); expect(interfaceDocs.properties[2].defaultValue).toBeUndefined(); }); diff --git a/misc/api-doc.ts b/misc/api-doc.ts index a3f2233f91..b5e9c606a4 100644 --- a/misc/api-doc.ts +++ b/misc/api-doc.ts @@ -325,7 +325,13 @@ class APIDocVisitor { }; } - visitType(node) { return node ? this.typeChecker.typeToString(this.typeChecker.getTypeAtLocation(node)) : 'void'; } + visitType(node) { + if (node && node.type) { + return node.type.getText(); + } + + return node ? this.typeChecker.typeToString(this.typeChecker.getTypeAtLocation(node)) : 'void'; + } isDirectiveDecorator(decorator) { const decoratorIdentifierText = decorator.expression.expression.text;