Angular 8 / Typescript set Свойство интерфейса при вызове данных - PullRequest
1 голос
/ 13 марта 2020

Так что я вызываю это в angular

 savePat(obj: PatientData): Observable<IJsonSaveResult> {
    return this.http.post<IJsonSaveResult>(`${environment.serviceUrl}/patients/addpatient`, obj);
  }

мой IJsonSaveResult равен

export interface IJsonSaveResult {
    success:    boolean;
    errors:     any[];
    resultSet: any;

}

resultSet может быть любым, но я хочу напечатать его как. Net Generics

savePat(obj: PatientData): Observable<IJsonSaveResult(PatientData)> {
        return this.http.post<IJsonSaveResult>(`${environment.serviceUrl}/patients/addpatient`, obj);
      }

есть идеи?

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Обобщения типа Typescript удивительно похожи на обобщения C# (неудивительно, поскольку Microsoft поддерживает Typescript).

Вы должны объявить тип resultSet как параметр generi c в IJsonSaveResult интерфейс:

export interface IJsonSaveResult<TResultSet> {
  success: boolean;
  errors: any[];
  resultSet: TResultSet;
}

И назовите это так:

savePat(obj: PatientData): Observable<IJsonSaveResult<PatientData>> {
  const url = `${environment.serviceUrl}/patients/addpatient`;
  return this.http.post<IJsonSaveResult<PatientData>>(url, obj);
}
1 голос
/ 13 марта 2020

Если я правильно понимаю, вы могли бы сделать что-то вроде:

export interface IJsonSaveResult<T> {
    success:    boolean;
    errors:     any[];
    resultSet: T[];
}

А потом:

savePat(obj: PatientData): Observable<IJsonSaveResult<PatientData>> {
    return this.http.post<IJsonSaveResult<PatientData>>(`${environment.serviceUrl}/patients/addpatient`, obj);
}
...