title: Working with maps in Typescript
body: <p>I am having a bit of trouble working with maps int Typescript. What I am trying to do is to use a HashMap smilier to that found in Java for example here is my Java object, </p>
  
  <pre><code>public class Payment {
      private String id;
      private DateTime created;
  
      //when they actually received the payment
      private DateTime paidDate;
      private String customerId;
      private String companyId;
      private BigDecimal amount;
      private BigDecimal allocated;
      private String description;
  
      // it must be the Id of PaymentMethod
      private String type;
  
      //to improve it
      private String currency;
  
      private Boolean fullPaid = false;
      private Boolean lockArchive = false;
  
      //&lt;InvoiceId, Amount&gt;
      private HashMap&lt;String, BigDecimal&gt; invoices = new HashMap&lt;&gt;();
  
      //getter and setters....
  </code></pre>
  
  <p>So what I have done in Typescript it to create a similar class for example, </p>
  
  <pre><code>export class Payment {
    public id?:string;
    public created?:string;
    public paid_date?:Date;
    public customer_id?:string;
    public company_id?:string;
    public amount?:number;
    public allocated?:number;
    public description?:string;
    public type?:string;
    public currency?:string;
    public full_paid?:boolean;
    public lock_archive?:boolean;
    public invoices:  {[invoice_id:string]:number};
  
  
    constructor(id: string, created: string, paid_date: Date, customer_id: string, company_id: string, amount: number, allocated: number, description: string, type: string, currency: string, full_paid: boolean, lock_archive: boolean, invoices: { [p: string]: number }) {
      this.id = id;
      this.created = created;
      this.paid_date = paid_date;
      this.customer_id = customer_id;
      this.company_id = company_id;
      this.amount = amount;
      this.allocated = allocated;
      this.description = description;
      this.type = type;
      this.currency = currency;
      this.full_paid = full_paid;
      this.lock_archive = lock_archive;
      this.invoices = invoices;
    }
  }
  </code></pre>
  
  <p>I am trying to to basically add to the the <code>invoices</code> map so I have the following function, </p>
  
  <pre><code>  public invoicesMap = new Map&lt;string, number&gt;();
  
    constructor(public dialogRef: MdDialogRef&lt;PaymentInvoiceSelectDialogComponent&gt;,
                private customerService:CustomerService,
                private paymentServices: PaymentsService) {
  
    }
  
    ngOnInit() {
  
      this.customer.subscribe((res)=&gt;{
        this.customer_name = res.customer_name
      }, error=&gt;{
        console.error(&lt;any&gt;error);
      });
  
      this.customerService.getListOfCustomerInvoices(this.customerId,'0','25')
        .subscribe( (res) =&gt;{
         this.invoices = res;
        },
        error =&gt; {
          console.error(&lt;any&gt;error);
        });
  
    }
  
    selectedInvoice(invoiceId: string, amount: number, event:any) {
  
      if(event.checked){
  
        if(!_.isEmpty(this.payment.invoices)){
  
          for(let [key, value] of this.invoicesMap) {
  
            if (key !== invoiceId) {
  
              this.invoicesMap.set(invoiceId, amount);
  
              for(let [key, vvalue] of this.invoicesMap) {
  
                if (key === invoiceId) {
  
                  this.availableAllocation = this.availableAllocation - vvalue;
  
                }
              }
            }
          }
        } else {
  
          this.invoicesMap.set(invoiceId,amount);
  
          for(let [key, vvalue] of this.invoicesMap) {
            if(key === invoiceId){
              this.availableAllocation = this.amount - vvalue;
            }
          }
        }
      } else if(!event.checked){
  
        for(let [key, vvalue] of this.invoicesMap) {
  
          if (key === invoiceId) {
  
            console.log("removing an item");
            this.availableAllocation += vvalue;
          }
  
        }
      }
  
      //at this point I would like to set this.payment.invoices to this.invoiceMap
      for(let [key, value] of this.invoicesMap){
        let v = {invoice_id:key,amount:value};
        console.log(v);
      }
  
      this.payment.allocated = this.availableAllocation;
    }
  
  
    savePayment(){
      console.log(JSON.stringify(this.payment));
      // this.paymentServices.updatePayment(this.payment)
      //   .subscribe((res)=&gt;{
      //     this.payment = res;
      //     this.dialogRef.close(this.payment);
      //     },
      //     error =&gt;{
      //       console.log(&lt;any&gt;error);
      //     });
    }
  </code></pre>
  
  <p>the items are added to the <code>invoiceMap</code> but the problem I am having now is adding <code>invoiceMap</code> to <code>payment.invoices</code>. If someone can point me in the right direction that would be much appreciated. Thanks</p>