title: How to properly import/export classes across angular modules?
body: <p>This question comes from the context of Enterprise Application.</p>
  
  <p>From all the books I've read and online samples I've seen about angular applications, each time we create a class (component, service, entity, etc.) we export them on the type definition and then directly import them wherever we require a reference (similar to using namespaces on C#) regardless both classes belongs to the same or distinct angular modules.</p>
  
  <p>Ex:</p>
  
  <pre><code>// In 'Commons/logger.service.ts'
  export class LoggerService { ... }
  
  // In 'Core/common.service.ts'
  export class CommonService { ... }
  
  // In 'Products/' module
  import { LoggerService } from '../Commons/logger.service'
  import { CommonService } from '../Core/common.service'
  
  export class ProductComponent { ... }
  </code></pre>
  
  <p>I started working on a (big) enterprise application project and noticed an approach I had never seen before, they created files to gather each type of class (service, entity, method parameter, component) exporting each one of them, export each one of these files on its corresponding angular module file and then, instead of importing the type directly from the type's file, perform the importing from the given module.</p>
  
  <p>The previous example would be transformed to something like this:</p>
  
  <pre><code>// In 'Commons/logger.service.ts'
  export class LoggerService { ... }
  
  // In 'Commons/services.ts'
  export * from './logger.service.ts'
  export * from './other.service.ts'
  export * from './another.service.ts'
  
  // In 'Commons/commons.module.ts'
  export * from 'services.ts'
  export * from 'entities.ts'
  /* ... */
  
  
  // In 'Products/' module
  import { LoggerService, OtherService } from '../Commons/commons.module'
  
  export class ProductComponent { ... }
  </code></pre>
  
  <p>Given that this approach is much more verbose than the one before and that it provokes awkward results in some cases (cyclic reference warning if importing classes within the same module)</p>
  
  <p>My questions are:</p>
  
  <ol>
  <li>Which approach is recommended, from a good design or best practices perspective?</li>
  <li>Is this approach recommended over the former? Why? For which cases?</li>
  <li>Why this approach isn't introduced on the major sources of documentation (angular online docs, angular books, ...)?</li>
  <li>What are the pros and cons of this approach.</li>
  </ol>