Derzeit habe ich eine Typdefinition als:
interface Param {
title: string;
callback: any;
}
Ich brauche so etwas wie:
interface Param {
title: string;
callback: function;
}
aber der 2. wird nicht akzeptiert.
javascript
typescript
Smrutiranjan Sahu
quelle
quelle
Function
wie in der ersten Zeile dieser Antwort gezeigt, und dass der zweite Absatz (mit dem Typ() => void
oder was auch immer zum Anwendungsfall passt) bevorzugt wird?Typescript aus Version 1.4 hat das
type
Schlüsselwort, das einen Typalias deklariert (analog zu atypedef
in C / C ++). Sie können Ihren Rückruftyp folgendermaßen deklarieren:Dies deklariert eine Funktion, die keine Argumente akzeptiert und nichts zurückgibt. Eine Funktion, die null oder mehr Argumente eines beliebigen Typs akzeptiert und nichts zurückgibt, wäre:
Dann können Sie zum Beispiel sagen:
Wenn Sie eine Funktion wünschen, die eine beliebige Anzahl von Argumenten akzeptiert und alles zurückgibt (einschließlich void):
Sie können einige obligatorische Argumente und dann eine Reihe zusätzlicher Argumente (z. B. eine Zeichenfolge, eine Zahl und dann eine Reihe zusätzlicher Argumente) wie folgt angeben:
Dies kann beispielsweise für EventEmitter-Handler hilfreich sein.
Funktionen können auf diese Weise so stark eingegeben werden, wie Sie möchten. Sie können jedoch mitgerissen werden und auf kombinatorische Probleme stoßen, wenn Sie versuchen, alles mit einem Typ-Alias festzunageln.
quelle
Function
und(...args: any[]) => any
was wird bevorzugt?...args: any[]
ist nicht sehr nützlich.type CallbackFunctionSomeVariadic = (arg1: string, arg2: number, ...args: any[]) => void;
was ich gesucht habe, ty.Nach Ryans Antwort denke ich, dass die gesuchte Schnittstelle wie folgt definiert ist:
quelle
Hier ist ein Beispiel für eine Funktion, die einen Rückruf akzeptiert
Wenn Sie sich nicht für die Rückgabewerte von Rückrufen interessieren (die meisten Leute wissen nicht, wie sie effektiv eingesetzt werden sollen), können Sie sie verwenden
void
Beachten Sie, dass die Signatur, die ich für den
callback
Parameter verwendet habe ...Ich würde sagen, dass dies ein TypeScript-Mangel ist, da erwartet wird, dass wir einen Namen für die Rückrufparameter angeben. In diesem Fall habe ich verwendet,
_
weil es innerhalb dersqk
Funktion nicht verwendbar ist .Wenn Sie dies jedoch tun
Es ist gültiges TypeScript, wird aber interpretiert als ...
Dh, wird denken , Typoskript der Parametername ist
number
und die implizite Typ istany
. Dies ist offensichtlich nicht das, was wir beabsichtigt haben, aber leider funktioniert TypeScript so.Vergessen Sie also nicht, die Parameternamen anzugeben, wenn Sie Ihre Funktionsparameter eingeben ... so dumm es auch scheinen mag.
quelle
Sie können einen Funktionstyp in der Schnittstelle auf verschiedene Arten definieren:
Die Verwendung ist sehr einfach,
quelle
Es gibt vier abstrakte Funktionstypen. Sie können diese separat verwenden, wenn Sie wissen, dass Ihre Funktion Argumente akzeptiert oder nicht, Daten zurückgibt oder nicht.
so was:
Um nur einen Typ als Funktionstyp zu verwenden, können wir alle abstrakten Typen wie folgt miteinander kombinieren:
dann benutze es wie:
Im obigen Beispiel ist alles korrekt. Das unten stehende Verwendungsbeispiel ist jedoch aus Sicht der meisten Code-Editoren nicht korrekt.
Der richtige Aufruf für Redakteure lautet wie folgt:
quelle
Sie können den Rückruf als 1) Funktionseigenschaft oder 2) Methode deklarieren :
Seit TS 2.6 gibt es einen wichtigen Tippunterschied :
Sie erhalten stärkere ("Sound") Typen im
--strict
oder--strictFunctionTypes
Modus, wenn eine Funktionseigenschaft deklariert wird. Nehmen wir ein Beispiel:Technisch gesehen sind Methoden bivariant und Funktionseigenschaften in ihren Argumenten unter kontravariant
strictFunctionTypes
. Methoden werden immer noch freizügiger überprüft (auch wenn sie nicht klingen), um in Kombination mit eingebauten Typen wie etwas praktischer zu seinArray
.Zusammenfassung
Beispielcode für den Spielplatz
quelle