为 ServiceStack DTO 赋值 Angular 6

Give values to ServiceStack DTO Angular 6

我有一个用于创建设备类型对象的表单,具有属性、名称和 ID。当我提交表单时,我得到了数据。进入设备对象。

var result: Equipment = this.addEquipment.value;

然后我创建了一个 CreateEquipment 实例,我想在其中插入来自 Equipment 的值。

var createEquipment: CreateEquipment = new CreateEquipment();

然后我尝试从结果中添加名称。

createEquipment.name = result.name; 

这是它失败的地方(未存储值)但是当我这样做时

createEquipment.name = "ASDASDASD"; 

有效。

有什么明显的我遗漏的吗?

名称后的console.log(result)和console.log(createEquipment)的图片应该已经定义好了。

这没有包含足够的信息来确定问题是什么,但是每当您使用显式强制转换时,您就是在告诉编译器类型是什么,它在 运行 时不知道是否该断言是正确的,由您来确保您告诉它的类型是它在 运行 时间收到的类型。

当您 运行 遇到这样的问题时,请记录实际值,以便确认它与您期望的 type/shape 匹配,即:

var result: Equipment = this.addEquipment.value;
console.log(result);

创建新实例时无需指定类型,这是隐含且不必要的重复,只需执行以下操作:

var createEquipment = new CreateEquipment();

如果这是问题所在,请登录以查看您实际分配的内容:

console.log(result.name, result);
createEquipment.name = result.name; 

您的问题表明 result.name 不包含您认为的内容。


查看更新后的屏幕截图表明问题是 运行time JavaScript 对象正在使用 PascalCase 但类型假定 驼峰式。如果您将 ServiceStack 与 .NET Core 一起使用,它应该是 using camelCase by default 除非您以某种方式覆盖它,例如 JsConfig.* 或以其他方式强制它使用 PascalCase。

如果您不使用 .NET Core,您可以强制使用驼峰命名法:

SetConfig(new HostConfig { 
    UseCamelCase = true 
});