[英]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.