没有包装器的 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;
}
}
我有一个自定义组件,它将一个对象传递给该组件的视图模型。这一切都使用打字稿。对象到达构造函数但被敲除包装在匿名对象中。
有没有办法防止这种情况并只获取强类型值对象?
在构造函数中我得到这个:
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;
}
}