Sie mehrere Methodensignaturen auf der Schnittstelle angeben können dann mehrere Verfahren Überlastungen auf der Klassenmethode:
interface INotificationService {
error(message: string, title?: string, autoHideAfter?: number);
error(message: string, autoHideAfter: number);
}
class MyNotificationService implements INotificationService {
error(message: string, title?: string, autoHideAfter?: number);
error(message: string, autoHideAfter?: number);
error(message: string, param1?: (string|number), param2?: number) {
var autoHideAfter: number,
title: string;
// example of mapping the parameters
if (param2 != null) {
autoHideAfter = param2;
title = <string> param1;
}
else if (param1 != null) {
if (typeof param1 === "string") {
title = param1;
}
else {
autoHideAfter = param1;
}
}
// use message, autoHideAfter, and title here
}
}
Und dies alles funktioniert:
var service: INotificationService = new MyNotificationService();
service.error("My message");
service.error("My message", 1000);
service.error("My message", "My title");
service.error("My message", "My title", 1000);
... und die error
Methode von INotificationService
wird die folgenden Optionen haben:
Playground
Brocco, THX für die kreative Idee mit optionalen Eigenschaften. Ich denke, wir verlieren mehr als wir gewinnen: jetzt ist es _mandatory_, um die "Parameter" zu nennen, wie die Nachricht: 'msg'. Wenn wir mehr obligatorische Parameter haben, ist das eine große Auswirkung. Auch thx für den entsprechenden Link zum Thema 467. und naja ... es ist 42. –
Kein Problem, worauf es hinausläuft ist, dass es mehr als eine Möglichkeit gibt, eine Katze zu häuten. Es ist nur eine Frage der Auswahl der Lösung, die am besten für Sie und Ihr Team funktioniert. – Brocco
Ich komplizierte Parameter (jQuery Ajax zum Beispiel) das ist eine fantastische Lösung! –