没有包装器的 Knockout Typescript 传递对象

Knockout Typescript Passing object without wrapper

我有一个自定义组件,它将一个对象传递给该组件的视图模型。这一切都使用打字稿。对象到达构造函数但被敲除包装在匿名对象中。

有没有办法防止这种情况并只获取强类型值对象?

在构造函数中我得到这个:

 Object { value: Order, $raw: Object }

我想马上value/Order。

这是我的代码:

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;
     }
}

但这不是很好。

很确定简短的回答是 "no"。 Components receive a params argument。但这并不意味着您必须使用 any 类型。您的 params 对象应该定义明确。

params — an object that will be passed on to the component. Typically this is a key-value object containing multiple parameters, and is typically received by the component’s viewmodel constructor.

您可以在 "Component.ts" 中指定 "params" 对象类型:

class ComponentVm {
     public Name:string;

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