Я изо всех сил пытаюсь найти решение проблемы, с которой я сталкиваюсь, где я пытаюсь использовать универсальный тип в качестве параметра типа.У меня есть следующие два класса / типа:
UserModel.ts:
export class UserModel{
private _id : string;
public get id() : string {
return this._id;
}
public set id(v : string) {
this._id = v;
}
....
}
HttpResponse.ts:
export class HttpResponse<T>{
private _success : boolean;
public get success() : boolean {
return this._success;
}
public set success(v : boolean) {
this._success = v;
}
private _model : T;
public get model() : T {
return this._model;
}
public set model(v : T) {
this._model = v;
}
}
Как вы можете догадаться, я использую этоиметь универсальный тип для простой обработки вызовов http.Предполагаемое использование - вызвать мой http-метод с типом HttpResponse и независимо от того, какой ожидаемый тип результата указан в качестве параметра типа.Например, при выполнении http-вызова, связанного с пользователем, параметр type будет HttpResponse<UserModel>>
или для вызова, связанного с ресурсом, это будет HttpResponse<ResourceModel>>
.Тем не менее, мне, кажется, не повезло, когда я пытаюсь это сделать.
В моей службе данных у меня есть метод, который ВЫСТАВЛЯЕТ на сервер, называется 'create' и
create<T>(data: any){
//Angular's HttpClient
return this.http.post<T>(data, ...);
}
Iзатем есть служба, которая расширяет этот класс и перегружает метод create некоторыми дополнительными битами, прежде чем он вызовет super.create.Я столкнулся с проблемой на этом этапе, потому что я хочу передать HttpResponse<Type the service should return>
, который в следующем случае будет HttpResponse<UserModel>
:
create<HttpResponse<UserModel>>(user: UserModel){
//stuff happens here
return super.create<HttpResponse<UserModel>>(user, ...);
}
Однако это возвращает синтаксическую ошибку на create<HttpResponse<UserModel>>
.Я посмотрел в Интернете и нашел другой способ достичь этого как что-то вроде:
create<HttpResponse, UserModel>(user: any){
//stuff happens here
return super.create<HttpResponse<UserModel>>(user, ...);
}
Но, опять же, это возвращает ошибку, в которой говорится, что «HttpResponse не является универсальным».
Идея проекта состоит в том, что, передавая таким образом типы, ответ json от сервера может автоматически отображаться в соответствующий тип, что упрощает использование ответа во всем приложении
Какие-нибудь указатели относительно того, где я иду не так в моем дизайне?