【发布时间】:2021-01-12 01:30:28
【问题描述】:
这是我认为非常熟悉的 angular & typescript 模式:
import { Component } from '@angular/core';
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import { Observable } from 'rxjs';
@Component({
selector: 'some-selector'
})
class someComponent{
someObject: someClass;
someSum: number;
someError: string;
constructor(private _someService: SomeService)
{}
getSomeObject(): void {
this._someService.getSomeObject().subscribe<someClass>({
next: results => {
this.someObject = results;
this.someSum = this.someObject.sum();
},
error: err => this.someError = err,
complete: () => {}
)
}
}
class SomeService {
constructor(private _http: HttpClient)
{}
getSomeObject(): Observable<someClass> {
return this._http.get<someClass>("");
}
}
class someClass {
prop_1:number;
prop_2:number;
sum():number{
return this.prop_1 + this.prop_2
}
}
我故意省略了错误捕获和其他内容,因为我想保持简单(并且真的希望以尽可能少的解释得到答案)。在我看来,这段代码拥有将 http.get 的结果转换为指定类所需的一切,但是如果我使用 Chrome 的 F12 检查器调试这个组件,我会收到如下错误:
core.js:4081 ERROR TypeError: _this.someObject.someSum 不是函数
...当它到达“this.someSum = someObject.sum();”部分时
那么我还需要做什么才能正确反序列化 http.get 的结果,使其表现得像键入的对象一样?
【问题讨论】:
-
你试过
(results:someClass) => {...}吗?不确定这是否是最好的方法,但可行。 -
SomeClass 或 someInterface.. 确实如此。你就是这样做的。
-
尝试将表达式右侧更改为
this.someObject.sum() -
谢谢@Kaustubh Badrike,我将更改示例以反映这一点。
标签: angular typescript typescript-generics