У меня есть следующий код, который кажется неправильным:
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. Однако я хочу использовать свойства, определенные в классе 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)
, если вы не хотите вручную устанавливать многие свойства, но это более или менее все. - person martin   schedule 09.10.2017