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