title: DTO Design in TypeScript/Angular2
body: <p>I'm currently developing an Angular 2 application. While developing I started to use TypeScript classes to create objects from JSON I receive through HTTP or when creating a new object in a form.</p>
  
  <p>The class may for example look like this.</p>
  
  <pre class="lang-js prettyprint-override"><code>export class Product {
      public id: number;
      public name: string;
      public description: string;
      public price: number;
      private _imageId: number;
      private _imageUrl: string;
  
      constructor(obj: Object = {}) {
          Object.assign(this, obj);
      }
  
      get imageId(): number {
          return this._imageId;
      }
      set imageId(id: number) {
          this._imageId = id;
          this._imageUrl = `//www.example.org/images/${id}`;
      }
  
      get imageUrl(): string {
          return this._imageUrl;
      }
  
      public getDTO() {
          return {
              name: this.name,
              description: this.description,
              imageId: this.imageId,
              price: this.price
          }
      }
  }
  </code></pre>
  
  <p>So far this solution shown above works great. But now let's assume that there are a lot more properties in the object and I want a clean DTO (for example without the private properties) for sending this Object by POST to my server. How could a more generic <code>getDTO()</code> function look like? I would like to avoid having a long list of property assignment. I was thinking about using decorators for the properties. But I don't really know how to use them to filter the properties for the DTO.</p>