1

我有以下似乎错误的代码:

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;
    }
}
4

3 回答 3

2

我们使用了一个很棒的库来将 json 映射到 typescript 对象。 https://github.com/shakilsiraj/json-object-mapper

json-object-mapper 依赖于反射元数据库,因为它使用装饰器来序列化和反序列化数据。

于 2018-02-19T01:52:31.063 回答
1

作为一个选项,您可以尝试使用 TypeScriptas运算符将您的 API 响应转换为 ClientSearchResult 类型。

import { Http, Response } from '@angular/http';

public search(searchString: string): Observable<ClientSearchResult[]> {
    const params = new HttpParams().set('searchString', searchString);
    return this.http.get(this.searchUrl, { params: params })
        .map((results: Response) => results.json() as ClientSearchResult[]);
}

这种方法要求您的模型类用作接口,或者只是作为接口:

interface ClientSearchResult {
  id: number;
  // etc
}
于 2017-10-09T21:02:33.003 回答
0

我一直在使用这个非常好的(并且在发布时是最新的)库:

https://www.npmjs.com/package/class-transformer

它可以处理具有嵌套类等的非常复杂的情况。

于 2019-11-13T16:50:17.937 回答