[BUG] [typescript-angular] AllOf hierarchy produces api that doesn't compile #8000

Description

@tschmidt01

OpenAPI Spec

openapi: 3.0.3
info:
title: Demo
version: 1.0.0
description: Demo
paths:
/some-path:
post:
operationId: create
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ExtendedTransferObjectRequest'
responses:
201:
description: some description
content:
application/json:
schema:
$ref: '#/components/schemas/ExtendedTransferObjectResponse'
components:
schemas:
TransferObject:
type: object
properties:
id:
type: string
format: uuid
ExtendedTransferObject:
type: object
allOf:
- $ref: '#/components/schemas/TransferObject'
- type: object
required:
- some-field
properties:
some-field:
type: string
ExtendedTransferObjectRequest:
type: object
allOf:
- $ref: '#/components/schemas/ExtendedTransferObject'
- type: object
ExtendedTransferObjectResponse:
type: object
allOf:
- $ref: '#/components/schemas/ExtendedTransferObject'
- type: object

Generated with

docker run --rm -v "${PWD}:/local" openapitools/openapi-generator-cli:latest generate -i /local/sample.yml -g typescript-angular -o /local/build

Results in a default.service.ts file with a invalid import statement along with unused class ExtendedTransferObject:

import { ExtendedTransferObject & object } from '../model/models';

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
       blocks
      (function() {
      function addCopyButtons() {
      document.querySelectorAll('pre code').forEach(function(codeBlock) {
      if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
      codeBlock.parentElement.setAttribute('data-copy-added', 'true');
      var btn = document.createElement('button');
      btn.textContent = 'Copy';
      btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
      btn.onmouseover = function() { this.style.opacity = '1'; };
      btn.onmouseout = function() { this.style.opacity = '0.7'; };
      btn.onclick = function() {
      navigator.clipboard.writeText(codeBlock.textContent).then(function() {
      btn.textContent = 'Copied!';
      setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
      });
      };
      codeBlock.parentElement.style.position = 'relative';
      codeBlock.parentElement.appendChild(btn);
      });
      }
      addCopyButtons();
      // Re-run on dynamic content
      var observer = new MutationObserver(addCopyButtons);
      observer.observe(document.body, { childList: true, subtree: true });
      })();
      }
      } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
      })();
      (function(){
      try {
      var __m = "github.com";
      var __re = new RegExp('^' + "github\\.com" + '
      
      Skip to content

      [BUG] [typescript-angular] AllOf hierarchy produces api that doesn't compile #8000

      Description

      @tschmidt01

      OpenAPI Spec

      openapi: 3.0.3
      info:
      title: Demo
      version: 1.0.0
      description: Demo
      paths:
      /some-path:
      post:
      operationId: create
      requestBody:
      required: true
      content:
      application/json:
      schema:
      $ref: '#/components/schemas/ExtendedTransferObjectRequest'
      responses:
      201:
      description: some description
      content:
      application/json:
      schema:
      $ref: '#/components/schemas/ExtendedTransferObjectResponse'
      components:
      schemas:
      TransferObject:
      type: object
      properties:
      id:
      type: string
      format: uuid
      ExtendedTransferObject:
      type: object
      allOf:
      - $ref: '#/components/schemas/TransferObject'
      - type: object
      required:
      - some-field
      properties:
      some-field:
      type: string
      ExtendedTransferObjectRequest:
      type: object
      allOf:
      - $ref: '#/components/schemas/ExtendedTransferObject'
      - type: object
      ExtendedTransferObjectResponse:
      type: object
      allOf:
      - $ref: '#/components/schemas/ExtendedTransferObject'
      - type: object
      

      Generated with

      docker run --rm -v "${PWD}:/local" openapitools/openapi-generator-cli:latest generate -i /local/sample.yml -g typescript-angular -o /local/build
      

      Results in a default.service.ts file with a invalid import statement along with unused class ExtendedTransferObject:

      import { ExtendedTransferObject & object } from '../model/models';
      

      Metadata

      Metadata

      Assignees

      No one assigned

        Type

        No type

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
          Skip to content

          [BUG] [typescript-angular] AllOf hierarchy produces api that doesn't compile #8000

          Description

          @tschmidt01

          OpenAPI Spec

          openapi: 3.0.3
          info:
          title: Demo
          version: 1.0.0
          description: Demo
          paths:
          /some-path:
          post:
          operationId: create
          requestBody:
          required: true
          content:
          application/json:
          schema:
          $ref: '#/components/schemas/ExtendedTransferObjectRequest'
          responses:
          201:
          description: some description
          content:
          application/json:
          schema:
          $ref: '#/components/schemas/ExtendedTransferObjectResponse'
          components:
          schemas:
          TransferObject:
          type: object
          properties:
          id:
          type: string
          format: uuid
          ExtendedTransferObject:
          type: object
          allOf:
          - $ref: '#/components/schemas/TransferObject'
          - type: object
          required:
          - some-field
          properties:
          some-field:
          type: string
          ExtendedTransferObjectRequest:
          type: object
          allOf:
          - $ref: '#/components/schemas/ExtendedTransferObject'
          - type: object
          ExtendedTransferObjectResponse:
          type: object
          allOf:
          - $ref: '#/components/schemas/ExtendedTransferObject'
          - type: object
          

          Generated with

          docker run --rm -v "${PWD}:/local" openapitools/openapi-generator-cli:latest generate -i /local/sample.yml -g typescript-angular -o /local/build
          

          Results in a default.service.ts file with a invalid import statement along with unused class ExtendedTransferObject:

          import { ExtendedTransferObject & object } from '../model/models';
          

          Metadata

          Metadata

          Assignees

          No one assigned

            Type

            No type

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              [BUG] [typescript-angular] AllOf hierarchy produces api that doesn't compile #8000

              Description

              @tschmidt01

              OpenAPI Spec

              openapi: 3.0.3
              info:
              title: Demo
              version: 1.0.0
              description: Demo
              paths:
              /some-path:
              post:
              operationId: create
              requestBody:
              required: true
              content:
              application/json:
              schema:
              $ref: '#/components/schemas/ExtendedTransferObjectRequest'
              responses:
              201:
              description: some description
              content:
              application/json:
              schema:
              $ref: '#/components/schemas/ExtendedTransferObjectResponse'
              components:
              schemas:
              TransferObject:
              type: object
              properties:
              id:
              type: string
              format: uuid
              ExtendedTransferObject:
              type: object
              allOf:
              - $ref: '#/components/schemas/TransferObject'
              - type: object
              required:
              - some-field
              properties:
              some-field:
              type: string
              ExtendedTransferObjectRequest:
              type: object
              allOf:
              - $ref: '#/components/schemas/ExtendedTransferObject'
              - type: object
              ExtendedTransferObjectResponse:
              type: object
              allOf:
              - $ref: '#/components/schemas/ExtendedTransferObject'
              - type: object
              

              Generated with

              docker run --rm -v "${PWD}:/local" openapitools/openapi-generator-cli:latest generate -i /local/sample.yml -g typescript-angular -o /local/build
              

              Results in a default.service.ts file with a invalid import statement along with unused class ExtendedTransferObject:

              import { ExtendedTransferObject & object } from '../model/models';
              

              Metadata

              Metadata

              Assignees

              No one assigned

                Type

                No type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions

                  , 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
                  Skip to content

                  [BUG] [typescript-angular] AllOf hierarchy produces api that doesn't compile #8000

                  Description

                  @tschmidt01

                  OpenAPI Spec

                  openapi: 3.0.3
                  info:
                  title: Demo
                  version: 1.0.0
                  description: Demo
                  paths:
                  /some-path:
                  post:
                  operationId: create
                  requestBody:
                  required: true
                  content:
                  application/json:
                  schema:
                  $ref: '#/components/schemas/ExtendedTransferObjectRequest'
                  responses:
                  201:
                  description: some description
                  content:
                  application/json:
                  schema:
                  $ref: '#/components/schemas/ExtendedTransferObjectResponse'
                  components:
                  schemas:
                  TransferObject:
                  type: object
                  properties:
                  id:
                  type: string
                  format: uuid
                  ExtendedTransferObject:
                  type: object
                  allOf:
                  - $ref: '#/components/schemas/TransferObject'
                  - type: object
                  required:
                  - some-field
                  properties:
                  some-field:
                  type: string
                  ExtendedTransferObjectRequest:
                  type: object
                  allOf:
                  - $ref: '#/components/schemas/ExtendedTransferObject'
                  - type: object
                  ExtendedTransferObjectResponse:
                  type: object
                  allOf:
                  - $ref: '#/components/schemas/ExtendedTransferObject'
                  - type: object
                  

                  Generated with

                  docker run --rm -v "${PWD}:/local" openapitools/openapi-generator-cli:latest generate -i /local/sample.yml -g typescript-angular -o /local/build
                  

                  Results in a default.service.ts file with a invalid import statement along with unused class ExtendedTransferObject:

                  import { ExtendedTransferObject & object } from '../model/models';
                  

                  Metadata

                  Metadata

                  Assignees

                  No one assigned

                    Type

                    No type

                    Projects

                    No projects

                      Milestone

                      No milestone

                      Relationships

                      None yet

                      Development

                      No branches or pull requests

                      Issue actions

                      , 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                      Skip to content

                      [BUG] [typescript-angular] AllOf hierarchy produces api that doesn't compile #8000

                      Description

                      @tschmidt01

                      OpenAPI Spec

                      openapi: 3.0.3
                      info:
                      title: Demo
                      version: 1.0.0
                      description: Demo
                      paths:
                      /some-path:
                      post:
                      operationId: create
                      requestBody:
                      required: true
                      content:
                      application/json:
                      schema:
                      $ref: '#/components/schemas/ExtendedTransferObjectRequest'
                      responses:
                      201:
                      description: some description
                      content:
                      application/json:
                      schema:
                      $ref: '#/components/schemas/ExtendedTransferObjectResponse'
                      components:
                      schemas:
                      TransferObject:
                      type: object
                      properties:
                      id:
                      type: string
                      format: uuid
                      ExtendedTransferObject:
                      type: object
                      allOf:
                      - $ref: '#/components/schemas/TransferObject'
                      - type: object
                      required:
                      - some-field
                      properties:
                      some-field:
                      type: string
                      ExtendedTransferObjectRequest:
                      type: object
                      allOf:
                      - $ref: '#/components/schemas/ExtendedTransferObject'
                      - type: object
                      ExtendedTransferObjectResponse:
                      type: object
                      allOf:
                      - $ref: '#/components/schemas/ExtendedTransferObject'
                      - type: object
                      

                      Generated with

                      docker run --rm -v "${PWD}:/local" openapitools/openapi-generator-cli:latest generate -i /local/sample.yml -g typescript-angular -o /local/build
                      

                      Results in a default.service.ts file with a invalid import statement along with unused class ExtendedTransferObject:

                      import { ExtendedTransferObject & object } from '../model/models';
                      

                      Metadata

                      Metadata

                      Assignees

                      No one assigned

                        Type

                        No type

                        Projects

                        No projects

                          Milestone

                          No milestone

                          Relationships

                          None yet

                          Development

                          No branches or pull requests

                          Issue actions

                          , 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                          Skip to content

                          [BUG] [typescript-angular] AllOf hierarchy produces api that doesn't compile #8000

                          Description

                          @tschmidt01

                          OpenAPI Spec

                          openapi: 3.0.3
                          info:
                          title: Demo
                          version: 1.0.0
                          description: Demo
                          paths:
                          /some-path:
                          post:
                          operationId: create
                          requestBody:
                          required: true
                          content:
                          application/json:
                          schema:
                          $ref: '#/components/schemas/ExtendedTransferObjectRequest'
                          responses:
                          201:
                          description: some description
                          content:
                          application/json:
                          schema:
                          $ref: '#/components/schemas/ExtendedTransferObjectResponse'
                          components:
                          schemas:
                          TransferObject:
                          type: object
                          properties:
                          id:
                          type: string
                          format: uuid
                          ExtendedTransferObject:
                          type: object
                          allOf:
                          - $ref: '#/components/schemas/TransferObject'
                          - type: object
                          required:
                          - some-field
                          properties:
                          some-field:
                          type: string
                          ExtendedTransferObjectRequest:
                          type: object
                          allOf:
                          - $ref: '#/components/schemas/ExtendedTransferObject'
                          - type: object
                          ExtendedTransferObjectResponse:
                          type: object
                          allOf:
                          - $ref: '#/components/schemas/ExtendedTransferObject'
                          - type: object
                          

                          Generated with

                          docker run --rm -v "${PWD}:/local" openapitools/openapi-generator-cli:latest generate -i /local/sample.yml -g typescript-angular -o /local/build
                          

                          Results in a default.service.ts file with a invalid import statement along with unused class ExtendedTransferObject:

                          import { ExtendedTransferObject & object } from '../model/models';
                          

                          Metadata

                          Metadata

                          Assignees

                          No one assigned

                            Type

                            No type

                            Projects

                            No projects

                              Milestone

                              No milestone

                              Relationships

                              None yet

                              Development

                              No branches or pull requests

                              Issue actions

                              , 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                              Skip to content

                              [BUG] [typescript-angular] AllOf hierarchy produces api that doesn't compile #8000

                              Description

                              @tschmidt01

                              OpenAPI Spec

                              openapi: 3.0.3
                              info:
                              title: Demo
                              version: 1.0.0
                              description: Demo
                              paths:
                              /some-path:
                              post:
                              operationId: create
                              requestBody:
                              required: true
                              content:
                              application/json:
                              schema:
                              $ref: '#/components/schemas/ExtendedTransferObjectRequest'
                              responses:
                              201:
                              description: some description
                              content:
                              application/json:
                              schema:
                              $ref: '#/components/schemas/ExtendedTransferObjectResponse'
                              components:
                              schemas:
                              TransferObject:
                              type: object
                              properties:
                              id:
                              type: string
                              format: uuid
                              ExtendedTransferObject:
                              type: object
                              allOf:
                              - $ref: '#/components/schemas/TransferObject'
                              - type: object
                              required:
                              - some-field
                              properties:
                              some-field:
                              type: string
                              ExtendedTransferObjectRequest:
                              type: object
                              allOf:
                              - $ref: '#/components/schemas/ExtendedTransferObject'
                              - type: object
                              ExtendedTransferObjectResponse:
                              type: object
                              allOf:
                              - $ref: '#/components/schemas/ExtendedTransferObject'
                              - type: object
                              

                              Generated with

                              docker run --rm -v "${PWD}:/local" openapitools/openapi-generator-cli:latest generate -i /local/sample.yml -g typescript-angular -o /local/build
                              

                              Results in a default.service.ts file with a invalid import statement along with unused class ExtendedTransferObject:

                              import { ExtendedTransferObject & object } from '../model/models';
                              

                              Metadata

                              Metadata

                              Assignees

                              No one assigned

                                Type

                                No type

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions