Ich habe die folgende Klasse in TypeScript:
class CallbackTest
{
public myCallback;
public doWork(): void
{
//doing some work...
this.myCallback(); //calling callback
}
}
Ich benutze die Klasse wie folgt:
var test = new CallbackTest();
test.myCallback = () => alert("done");
test.doWork();
Der Code funktioniert und zeigt erwartungsgemäß ein Meldungsfeld an.
Meine Frage ist: Gibt es einen Typ, den ich für mein Klassenfeld bereitstellen kann myCallback
? Im Moment ist das öffentliche Feld myCallback
vom Typ any
wie oben gezeigt. Wie kann ich die Methodensignatur des Rückrufs definieren? Oder kann ich den Typ einfach auf einen Rückruftyp einstellen? Oder kann ich beides tun? Muss ich verwenden any
(implizit / explizit)?
Ich habe so etwas versucht, aber es hat nicht funktioniert (Fehler beim Kompilieren):
public myCallback: ();
// or:
public myCallback: function;
Ich konnte online keine Erklärung dafür finden, also hoffe ich, dass Sie mir helfen können.
quelle
Um noch einen Schritt weiter zu gehen, können Sie einen Typzeiger auf eine Funktionssignatur wie folgt deklarieren:
und benutze es so:
quelle
let callback: myCallbackType|null = null;
type MyHandler = (myArgument: string) => void
stattdessen. (Aufrufbare Typen)" ; siehe TSVs Antwort...args: any[]
. Beispiel: Exportschnittstelle MyInterface {/ ** Eine Rückruffunktion. / callback: (... args: any []) => any, / * Parameter für die Rückruffunktion. * / callbackParams: any []}Sie können einen neuen Typ deklarieren:
Aktualisieren.
Das
declare
Schlüsselwort ist nicht erforderlich. Es sollte in den .d.ts-Dateien oder in ähnlichen Fällen verwendet werden.quelle
var handler: (myArgument: string) => void
syntaktisch gültig (wenn etwas chaotisch).Hier ist ein Beispiel: Akzeptieren Sie keine Parameter und geben Sie nichts zurück.
Wenn Sie einen Parameter akzeptieren möchten, können Sie diesen auch hinzufügen:
Und wenn Sie einen Wert zurückgeben möchten, können Sie diesen auch hinzufügen:
quelle
exactly equivalent
.Wenn Sie eine generische Funktion wünschen, können Sie Folgendes verwenden. Obwohl es nirgendwo dokumentiert zu sein scheint.
quelle
Sie können Folgendes verwenden:
type
Schlüsselwort, Aliasing eines Funktionsliteral)Hier ist ein Beispiel für deren Verwendung:
quelle
Beim Versuch, den Rückruf einem Ereignis-Listener hinzuzufügen, ist derselbe Fehler aufgetreten. Seltsamerweise wurde das Problem behoben, indem der Rückruftyp auf EventListener gesetzt wurde. Es sieht eleganter aus, als eine ganze Funktionssignatur als Typ zu definieren, aber ich bin mir nicht sicher, ob dies der richtige Weg ist.
quelle
Ich bin etwas spät dran, aber seit einiger Zeit können Sie in TypeScript die Art des Rückrufs mit definieren
Anwendungsbeispiel:
quelle