javascript - Typescript med jQuery UI-widgets - Implementering av kallesignaturer
Jeg har mange dialoger på hele nettstedet mitt (påloggingsdialog, registreringsdialog, kontaktdialog, osv.) som jeg prøver å modellere ved hjelp av Typescript.
jquery-ui d.ts-filen definerer et Dialog-grensesnitt som følger:
interface Dialog extends Widget, DialogOptions, DialogEvents{ }
Alt i DialogOptions og DialogEvents er valgfrie, så det er ingen problemer der, men Widget-grensesnittet definerer noen kallesignaturer som jeg ikke forstår:
interface Widget {
(methodName: string): JQuery;
(options: WidgetOptions): JQuery;
(options: AccordionOptions): JQuery;
(optionLiteral: string, optionName: string): any;
(optionLiteral: string, options: WidgetOptions): any;
(optionLiteral: string, optionName: string, optionValue: any): JQuery;
(name: string, prototype: any): JQuery;
(name: string, base: Function, prototype: any): JQuery;
}
Når jeg prøver å implementere dette grensesnittet i en klasse:
class LoginDialog implements Dialog {
}
Komplilatoren klager:
Class 'LoginDialog' declares interface 'Dialog' but does not implement it: Type 'Dialog' requires a call signature, but Type 'LoginDialog' lacks one.
Jeg forstår ikke hvordan jeg skal implementere disse "call signatures" eller hva de faktisk skal gjøre, jeg forstår faktisk ikke engang hva en call signature er.
REDIGER :
Jeg fant en type gyldig bruksområde for en kall-signatur er for tilbakekallstyping:
interface ICallback{
(param: string) : void;
}
function someMethod(callback: ICallback){
callback('a string'); //Good
callback(5); //Bad
}
Men spørsmålet står fortsatt, ettersom jeg ikke kunne finne et bruksområde for flere kall-signaturer og fortsatt ikke forstår hvordan man implementerer jquery-ui.d.ts Dialog-grensesnittet
Svar #1
Hvis du bruker jQuery UI, trenger du ikke å implementere noen av disse grensesnittene, da de allerede er implementert i jQuery UI. Disse grensesnittene gir deg bare typeinformasjon som du kan bruke for å kalle de eksisterende jQuery UI-funksjonene med statisk typing.
$( "#dialog" ).dialog();
Uten jquery-ui.d.ts ville typesystemet ikke visst om dialog()-funksjonen, for eksempel.
