2016-03-04 51 views
1

敲除打字稿傳遞對象我有傳遞一個目的是該組件的視圖模型的定製組件。這使用打字稿。該對象到達構造函數中,但它通過敲除包裝在匿名對象中。無包裝

是否有辦法防止這種情況,只是得到了強類型值對象?

在構造函數中我得到這個:

Object { value: Order, $raw: Object } 

我想立刻擁有價值/訂單。

這裏是我的代碼:

的index.html:

<div data-bind="foreach: Orders"/> 
    <my-component params="value: $data"></my-component> 
</div> 

component.html:

<span data-bind="text: Name"></span> 

component.ts

ko.components.register('my-component', { 
    viewModel: ComponentVm, 
    template: component.html" 
}); 

Component.ts:

class ComponentVm{ 
    public Name:string; 

    constructor(order:Order){ 
      this.Name = order.Name; //Problem here because of anonymous object 
    } 
} 

Order.ts:

Class Order { 
     public Name:string = "Bob"; 
     constructor(){} 
} 

一個解決辦法是:

class ComponentVm{ 
    public Name:string; 

    constructor(anonymousObject:any){ 
      let order = anonymousObject.value; 
      this.Name = order.Name; 
    } 
} 

但是,這是不是真的很好。

回答

0

很確定短的答案是「否」。 Components receive a params argument。但這並不意味着你必須使用any類型。你的params對象應該是明確的。

params - 將傳遞給組件的對象。 通常,這是一個包含多個參數的鍵值對象,它通常由組件的視圖模型構造函數接收。

+0

對不起,我怕我不遵守。我如何定義params對象,如果我無法控制它?它應該是一個命令(這是params的定義)。 – Carbosound1

+0

不,這是一個包含訂單的對象。 –

3

您可以指定在 「Component.ts」 「PARAMS」 對象類型:

class ComponentVm { 
    public Name:string; 

    constructor(params: { order: Order }){ 
      this.Name = params.order.Name; 
    } 
}