Mam następującą klasę w TypeScript:
class CallbackTest
{
public myCallback;
public doWork(): void
{
//doing some work...
this.myCallback(); //calling callback
}
}
Używam klasy w ten sposób:
var test = new CallbackTest();
test.myCallback = () => alert("done");
test.doWork();
Kod działa, więc wyświetla okno komunikatu zgodnie z oczekiwaniami.
Moje pytanie brzmi: Czy jest jakiś typ, który mogę podać w polu mojej klasy myCallback
? Obecnie pole publiczne myCallback
jest typu any
pokazanego powyżej. Jak mogę zdefiniować sygnaturę metody wywołania zwrotnego? Czy mogę po prostu ustawić typ na rodzaj oddzwaniania? Czy mogę nic z tego zrobić? Czy muszę używać any
(niejawne / jawne)?
Próbowałem czegoś takiego, ale nie zadziałało (błąd kompilacji):
public myCallback: ();
// or:
public myCallback: function;
Nie mogłem znaleźć żadnego wyjaśnienia tego w Internecie, więc mam nadzieję, że możesz mi pomóc.
źródło
Aby pójść o krok dalej, możesz zadeklarować wskaźnik typu do sygnatury funkcji, na przykład:
i użyj go w ten sposób:
źródło
let callback: myCallbackType|null = null;
type MyHandler = (myArgument: string) => void
zamiast tego użyj . (Wywoływalne-typy)" ; zobacz odpowiedź TSV...args: any[]
. Przykład: interfejs eksportu MyInterface {/ ** Funkcja zwrotna. / callback: (... args: any []) => any, / * Parametry funkcji zwrotnej. * / callbackParams: any []}Możesz zadeklarować nowy typ:
Aktualizacja.
Słowo
declare
kluczowe nie jest konieczne. Powinien być używany w plikach .d.ts lub w podobnych przypadkach.źródło
var handler: (myArgument: string) => void
jest poprawna składniowo (jeśli jest trochę niechlujna).Oto przykład - nie przyjmowanie żadnych parametrów i nic nie zwraca.
Jeśli chcesz zaakceptować parametr, możesz go również dodać:
A jeśli chcesz zwrócić wartość, możesz to również dodać:
źródło
exactly equivalent
.Jeśli chcesz mieć funkcję ogólną, możesz użyć następujących. Chociaż wydaje się, że nie jest to nigdzie udokumentowane.
źródło
Możesz użyć następujących:
type
słowa kluczowego, aliasując literał funkcji)Oto przykład, jak z nich korzystać:
źródło
Napotkałem ten sam błąd podczas próby dodania wywołania zwrotnego do detektora zdarzeń. O dziwo, ustawienie typu wywołania zwrotnego na EventListener rozwiązało problem. Wygląda to bardziej elegancko niż definiowanie całego podpisu funkcji jako typu, ale nie jestem pewien, czy jest to właściwy sposób.
źródło
Trochę się spóźniłem, ale od jakiegoś czasu w TypeScript można zdefiniować typ wywołania zwrotnego za pomocą
Przykład użycia:
źródło