繁体   English   中英

将对象转换为特定类型时,不会调用目标类型的对象设置器

[英]Object setter of the target type is not called when casting an object into the specific type

假设有以下类型的类:

class Person {
  private _firstName: string;

  get FirstName(): string { return this._firstName; }
  set FirstName(firstName: string) { this._firstName = firstName; }
}

调用HttpClient.get<Person>()它返回一个Person类型的对象,但它不会调用该对象属性的 setter。

显示演员不调用设置器但正常对象创建的问题的示例: https : //jsfiddle.net/r175sLkh/

这背后的原因似乎是这样一个事实,即在从 JSON 字符串转换时,会生成一个匿名对象,然后将其转换为所需的对象。 当属性有 setter 时,它将被 JSON 对象中的简单类型覆盖。

由于名称相同,原始Person.FirstName()将被(anonymous).FirstName覆盖。

因此,要真正让我的 setter 生效,我必须迭代HttpClient.get<Person>()的结果,并手动将其逐个属性分配给新创建的Person对象……

所以我现在的问题……

除了手动转换/分配它们之外,是否有更好的方法来确保在投射到所需对象时尊重 setter? (这个问题通常与 TypeScript 中的 getter/setter 无关。)

实际上,您的第一个错误在于您对执行时间的假设。 Typescript 只提供编译时类型安全,它不像 java 或 c# 等其他类型保存语言那样工作。 不强制执行这些类型。 HttpClient.get<Person>()这样的表达式并没有强制返回 Person 实例,它只是声明您假设它将返回符合 Person 类的对象。 没有将匿名对象转换为 Person 对象,只是返回了反序列化的对象。

因此,除了执行它的显式代码之外,没有办法强制执行 setter。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM