У меня есть следующий класс в TypeScript:
class CallbackTest
{
public myCallback;
public doWork(): void
{
//doing some work...
this.myCallback(); //calling callback
}
}
Я использую класс, как это:
var test = new CallbackTest();
test.myCallback = () => alert("done");
test.doWork();
Код работает, поэтому он отображает окно сообщения, как и ожидалось.
Мой вопрос: есть ли какой-нибудь тип, который я могу предоставить для своего поля класса myCallback
? Прямо сейчас, публичное поле myCallback
имеет тип, any
как показано выше. Как я могу определить сигнатуру метода обратного вызова? Или я могу просто установить тип для какого-то типа обратного вызова? Или я могу сделать ничего из этого? Должен ли я использовать any
(неявный / явный)?
Я пробовал что-то вроде этого, но это не сработало (ошибка времени компиляции):
public myCallback: ();
// or:
public myCallback: function;
Я не смог найти объяснения этому в Интернете, поэтому надеюсь, что вы мне поможете.
источник
Чтобы пойти еще дальше, вы можете объявить указатель типа на сигнатуру функции, например:
и используйте это так:
источник
let callback: myCallbackType|null = null;
type MyHandler = (myArgument: string) => void
вместо этого. (Callable-types)" ; см . ответ TSV...args: any[]
. Пример: интерфейс экспорта MyInterface {/ ** Функция обратного вызова. / callback: (... args: any []) => any, / * Параметры для функции обратного вызова. * / callbackParams: любой []}Вы можете объявить новый тип:
Обновить.
declare
Ключевое слово не нужно. Его следует использовать в файлах .d.ts или в подобных случаях.источник
var handler: (myArgument: string) => void
синтаксически допустимо (если немного грязно).Вот пример - не принимать параметры и ничего не возвращать.
Если вы хотите принять параметр, вы также можете добавить его:
И если вы хотите вернуть значение, вы можете добавить это также:
источник
exactly equivalent
.Если вы хотите универсальную функцию, вы можете использовать следующее. Хотя, кажется, это нигде не задокументировано.
источник
Вы можете использовать следующее:
type
ключевое слово, псевдоним функции литерал)Вот пример того, как их использовать:
источник
Я столкнулся с той же ошибкой при попытке добавить обратный вызов для прослушивателя событий. Как ни странно, установка типа обратного вызова в EventListener решила это. Это выглядит более элегантно, чем определение всей сигнатуры функции как типа, но я не уверен, что это правильный способ сделать это.
источник
Я немного опоздал, но, так как некоторое время назад в TypeScript вы могли определить тип обратного вызова с
Пример использования:
источник