我遇到了一些关于setter& amp;的奇怪行为。从Angular(v5)HttpClient
检索时,在TypeScript中设置/返回对象的另一个公共属性的getter。
以下是重要的结构:
export interface NamedEntity {
id: number;
name: string;
priority?: number;
}
export Rule implements NamedEntity {
ruleId: number;
ruleName: string;
//..other properties
get id(): number {
return this.ruleId;
}
set id(id: number){
this.ruleId = id;
}
get name(): string {
return this.ruleName;
}
set name(name: string){
this.ruleName = name;
}
}
//Another class that implements NamedEntity in the same way
我正在使用Rule
检索HttpClient
个对象:
return http.get<Rule[]>("my url");
订阅Observable<Rule>
时,我发现所有不是getter / setter的属性在我的调试器和角度模板中都没有问题。但是,基于setter / getter的属性始终在调试器中显示为undefined,在我的角度模板上显示为空白。
我的角度项目是使用Angular-CLI设置的,我的tsconfig.json的目标设置为“es5”。
这很可能是因为HttpClient
将数据转换为由TypeScript生成的Rule
接口的形状。我如何将HttpClient
调用的结果对象作为具体Rule
类的实例,而不是它的隐式接口?
答案 0 :(得分:4)
我需要查看更多代码才能确定...但我猜你希望你的http请求返回一个Rule对象。它不是。相反,它返回其数据与Rule对象定义的属性。意味着它没有任何对象的getter,setter或方法。
如果您的对象是普通的(没有层次结构),您可以执行以下操作:
x = Object.assign(new Rule(), rule);
其中rule
是来自Http调用的值。
此代码创建一个新的Rule对象(然后具有getter,setter和方法)并将数据复制到其中。