JSON对象映射到打字稿对象我有下面的代码,这似乎错了:如何使用RxJS
public search(searchString: string): Observable<Array<ClientSearchResult>> {
let params = new HttpParams().set('searchString', searchString);
return this.http
.get<Array<ClientSearchResult>>(this.searchUrl, { params: params })
.map((results: ClientSearchResult[]) => results.map((r: ClientSearchResult) => new ClientSearchResult(r)));
}
我知道,API返回一个JSON对象,它是不一样的我的打字稿的实例类。但是,我想使用TypeScript类中定义的属性。
有没有更好的方法将来自我的API调用的数组映射到实际由ClientSearchResult
实例组成的数组?
这里是ClientSearchResult
对象:
import { Name } from './name';
export class ClientSearchResult {
public id: string;
public name: Name;
public dateOfBirth: Date;
public socialSecurityNumber: string;
public get summary(): string {
let result: string = `${this.name}`;
if (this.dateOfBirth)
result += ` | ${this.dateOfBirth.toLocaleDateString()}`;
return result;
}
constructor(source: ClientSearchResult) {
this.id = source.id;
this.name = new Name(source.name);
this.dateOfBirth = source.dateOfBirth? new Date(source.dateOfBirth) : undefined;
this.socialSecurityNumber = source.socialSecurityNumber;
}
public toString(): string {
return this.summary;
}
}
如果您不想手动设置许多属性,但无所谓全部,您可以使用Object.assign(new ClientSearchResult(),decodedJsonObject)。 – martin
你能告诉我们,ClientSearchResult的构造函数吗?也许'新的ClientSearchResult(r)'不是将转换应用到ClientSearchResult实例的方式。 – Luillyfe
@Luillyfe我已经更新了这个问题。 – mlindegarde