Ich schreibe ein SDK und ich verwende eine Methode CallApi, um die repetitive Arbeit für den Aufbau einer HTTP-Anfrage zu tun.Wie man eine Schnittstelle dynamisch benutzt?
Hier ist sie:
private callApi(method: string, route: string, options?: object, body?: object) {
// build up query parameters
let params = new HttpParams();
if (options) {
_.forOwn(options, (val, key) => {
params.append(key, val);
})
}
// get and delete don't have a body
if (method == 'get' || method === 'delete') {
return this.http[method](this.apiurl + route, {
params: params,
headers: new HttpHeaders().set('Authorization', 'Bearer ' + this.GetToken())
})
} else {
return this.http[method](this.apiurl + route, body, {
params: params,
headers: new HttpHeaders().set('Authorization', 'Bearer ' + this.GetToken())
})
}
}
Ich möchte es mit einer anderen Methode nennen, zum Beispiel:
ListCategories: (options?: object) => {
return this.callApi('get', '/me/categories', options)
},
Aber ich würde auch irgendwie gern haben sie diese Methode aufrufen, mit eine Schnittstelle, die für die aufrufende Methode spezifisch ist.
Also zum Beispiel, wenn ich ListCategories aufrufen würde ich erwarten, dass diese generische Methode callApi irgendwie die Schnittstelle für List Kategorien kennen. Wie kann ich das erreichen? Ich habe versucht, die Schnittstelle zu übergeben, aber während ich über Schnittstellen lese, sieht es nicht so aus, als ob sie während der Laufzeit existieren.
Verwendung ein generischer Typ '' –
Aravind
Aber ich würde eine bestimmte Schnittstelle mögen. Ich habe die Methode aktualisiert, die es aufruft: ListCategories: (Optionen ?: Objekt): Observable was zu tun scheint, was ich will. Im Grunde hat die Methode, die sie aufruft, die Schnittstelle definiert, CallApi nicht. Ich denke, das ist in Ordnung. Vielleicht nicht Best Practices? –
* da ich über Schnittstellen lese, sieht es nicht so aus, als ob sie während der Laufzeit existieren * - sie sicherlich nicht. Sie haben möglicherweise XY-Problem. Überlegen Sie, ob Sie detailliert erläutern möchten, was Sie erreichen möchten. Was sind diese Schnittstellen und wie genau callApi sollte von ihnen betroffen sein. – estus