В настоящее время у меня есть определение типа как:
interface Param {
title: string;
callback: any;
}
Мне нужно что-то вроде:
interface Param {
title: string;
callback: function;
}
но 2-й не принимается.
javascript
typescript
Смрутиранян Саху
источник
источник
Function
как показано в первой строке этого ответа, и() => void
предпочитаете второй абзац (с использованием типа или того, что соответствует варианту использования)?Typescript из v1.4 имеет
type
ключевое слово, которое объявляет псевдоним типа (аналогично atypedef
в C / C ++). Вы можете объявить свой тип обратного вызова таким образом:которая объявляет функцию, которая не принимает аргументов и ничего не возвращает. Функция, которая принимает ноль или более аргументов любого типа и ничего не возвращает, будет:
Тогда вы можете сказать, например,
Если вам нужна функция, которая принимает произвольное количество аргументов и возвращает что угодно (включая void):
Вы можете указать некоторые обязательные аргументы, а затем набор дополнительных аргументов (скажем, строку, число, а затем набор дополнительных аргументов), таким образом:
Это может быть полезно для таких вещей, как обработчики EventEmitter.
Таким образом, функции можно набирать так сильно, как вам нравится, хотя вы можете увлечься и столкнуться с комбинаторными проблемами, если попытаетесь все связать с псевдонимом типа.
источник
Function
и(...args: any[]) => any
что предпочтительнее?...args: any[]
не очень полезноtype CallbackFunctionSomeVariadic = (arg1: string, arg2: number, ...args: any[]) => void;
что я искал, ты.Исходя из ответа Райана, я думаю, что интерфейс, который вы ищете, определяется следующим образом:
источник
Вот пример функции, которая принимает обратный вызов
Если вас не волнуют возвращаемые значения обратных вызовов (большинство людей не знают, как их эффективно использовать), вы можете использовать
void
Обратите внимание, подпись, которую я использовал для
callback
параметра ...Я бы сказал, что это недостаток TypeScript, потому что мы должны предоставить имя для параметров обратного вызова. В этом случае я использовал,
_
потому что он не может использоваться внутриsqk
функции.Однако, если вы сделаете это
Это допустимый TypeScript, но он будет интерпретирован как ...
Т.е., машинопись будет думать , что параметр имя является
number
и подразумеваемый типany
. Это явно не то, что мы намеревались, но, увы, именно так работает TypeScript.Так что не забывайте указывать имена параметров при наборе параметров вашей функции ... глупо, как может показаться.
источник
Вы можете определить тип функции в интерфейсе различными способами,
Использование очень просто,
источник
Существует четыре типа абстрактных функций, вы можете использовать их отдельно, когда знаете, что ваша функция будет принимать аргумент (ы) или нет, будет возвращать данные или нет.
как это:
Для использования только одного типа в качестве любого типа функции мы можем объединить все абстрактные типы вместе, например так:
тогда используйте это как:
В приведенном выше примере все правильно. Но приведенный ниже пример использования некорректен с точки зрения большинства редакторов кода.
Правильный вызов для редакторов выглядит так:
источник
Вы можете объявить обратный вызов как 1) свойство функции или 2) метод :
Существует важная разница в типизации, начиная с TS 2.6 :
Вы получаете более сильные («звуковые») типы в режиме
--strict
или--strictFunctionTypes
, когда объявляется свойство функции . Давайте возьмем пример:Технически говоря , методы являются бивариантными, а свойства функций контравариантными в своих аргументах
strictFunctionTypes
. Методы все еще проверены более допустимо (даже если не звук), чтобы быть немного более практичным в комбинации со встроенными типами какArray
.Резюме
Пример кода игровой площадки
источник