Угловая машинопись дважды реализует один и тот же универсальный интерфейс в классе - PullRequest
0 голосов
/ 06 февраля 2019

Привет. Я уже некоторое время разбираюсь с кодом. У меня есть обходной путь, но я чувствую, что это не правильно.Любая помощь приветствуется.

Я использую шаблон, показанный здесь введите описание ссылки здесь

Я пытаюсь реализовать один и тот же универсальный интерфейс дважды для двух разных моделей, гдеодин вложен внутрь другого, который является представителем вложенного объекта JSON.Я использовал шаблон адаптера.вот где я нахожусь:

import { Injectable } from '@angular/core';
import { Adapter } from './core/adapter';
import { map } from 'rxjs/operators';

export class MatchPoint {

constructor(
    public matchFlag: number,
    public maxIndividualScore: number,
    public inquiry: string,
    public mrc: number,
    public reason3: number,
    public reason2: number,
    public reason1: number,
    public numOfResults: number,
    public trans_id: string,
    public searchResult: SearchResult[]
) { }
}

export class SearchResult {

constructor(
    public jns: string,
    public city: string,
    public totalScorePrint: string,
    public cpin_count_i: string,
    public name: string,
    public ppbin: string,
    public hdistph: string,
    public phones: string,
    public searchlevel: string,
    public jas: string,
    public hdisttax: string,
    public cpbin: string,
    public state: string,
    public street: string,
    public totalScoreDecay: string,
    public ns1: string,
    public ns: string,
    public lvid: string,
    public zip5: string,
    public mrc: string
) { }
}

@Injectable(
{ providedIn: 'root' }
)
export class MatchPointAdapter implements Adapter<MatchPoint>, 
**Adapter<SearchResult>** {


adapt(item: any): MatchPoint {
    return new MatchPoint(
        item.matchFlag,
        item.maxIndividualScore,
        item.inquiry,
        item.mrc,
        item.reason3,
        item.reason2,
        item.reason1,
        item.numOfResults,
        item.trans_id,
        this._adapt(item.searchResult) // need to loop and use the adapt
    );
}

_adapt(item: any[]): SearchResult[] {
    return new SearchResult(
        item.jns,
        item.city,
        item.totalScorePrint,
        item.cpin_count_i,
        item.name,
        item.ppbin,
        item.hdistph,
        item.phones,
        item.searchlevel,
        item.jas,
        item.hdisttax,
        item.cpbin,
        item.state,
        item.street,
        item.totalScoreDecay,
        item.ns1,
        item.ns,
        item.lvid,
        item.zip5,
        item.mrc
    );
}

}

Вот обходной путь, который у меня есть:

export class MatchPointAdapter implements Adapter<MatchPoint> {


adapt(item: any): MatchPoint {
    return new MatchPoint(
        item.matchFlag,
        item.maxIndividualScore,
        item.inquiry,
        item.mrc,
        item.reason3,
        item.reason2,
        item.reason1,
        item.numOfResults,
        item.trans_id,
        this.getSearchResults(item.searchResult)
    );
}

getSearchResults(searchResult: any[]): SearchResult[] {
    return searchResult.map((item: any) =>
        new SearchResult(
            item.jns,
            item.city,
            item.totalScorePrint,
            item.cpin_count_i,
            item.name,
            item.ppbin,
            item.hdistph,
            item.phones,
            item.searchlevel,
            item.jas,
            item.hdisttax,
            item.cpbin,
            item.state,
            item.street,
            item.totalScoreDecay,
            item.ns1,
            item.ns,
            item.lvid,
            item.zip5,
            item.mrc
        ));
}
}

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...