Я только что нашел строку в файле TypeScript внутри класса, которая выглядит как
private handlers: ((event: string) => void)[]
Тогда есть еще одна функция:
private fire(event: string): void {
for (const handler of this.handlers) {
handler(event);
}
}
Поэтому я предполагаю, что у каждого элемента массива есть функция, которую можно вызвать, но я действительно не понимаю, как это работает. Если к каждому элементу прикреплена эта функция, которая всегда возвращает void, не должны ли все элементы массива быть полностью пустыми?
Или это какой-то волшебный синтаксис TypeScript?
"я предполагаю, что у каждого элемента массива есть функция, которую можно вызвать, но я действительно не понимаю, как это работает" Это не волшебство. Это просто базовый TS: (event: string) => void
— это обозначение типа для функции. X[]
— это обозначение типа для массива X
es.
Скобки []
в машинописи объявляют массив. И синтаксис (...params: any[]) => any
объявляет функцию. Итак, объединив вместе (и используя скобки!) вы получите массив функций.
Это означает, что свойство handlers
представляет собой массив функций, которые принимают один параметр event
типа string
и возвращают void
. Таким образом, элементы внутри массива не все являются "имеют" функцией, которую можно вызвать, но они являются функциями находятся.
Здесь важно отметить, что массив содержит только функции. Они не вызываются. Чтобы на самом деле запустить функции, вам нужно будет получить их (путем итерации или индексации массива) и вызвать их с указанными параметрами, как и любую другую функцию.
Хорошо, спасибо, я понял эту часть, но разве элемент не должен быть пустым с возвращаемым типом void? Я думаю, что массив, который доступен для записи, но не для чтения, не имеет смысла, что мне не хватает?
Что вы подразумеваете под элементами, которые должны быть пустыми, и почему массив не читается... он читается в функции fire
Для меня эта первая строка выглядит как Array.fill( () => undefined)
Нет... это как Array.map(() => () => { })), потому что массив заполняется не undefined
, а функциями
sry.. Я действительно пытаюсь это понять, но определение этих функций в массиве уже говорит, что возвращаемый тип недействителен? Например, если я вызываю функцию огня в примере в публикации. Я вызываю каждую функцию в массиве со строковым параметром и... черт, я только что нашел функцию, которая добавлена, и теперь все это имеет смысл. Спасибо друг
Может быть, это легче понять, если вы читаете это так:
private handlers: Function[]
да, так я могу это понять. Я просто очень запутался в возвращаемом типе void
Void указывает только, что функции внутри массива ничего не возвращают при вызове... это точно так же, как и любая другая функция в TS/JS.
@MrCodingB Многие функции не возвращают void
в JS/TS. Простые примеры: parseInt
, Boolean
, () => 4
и много-много, еще многие.
Да, извините... "каждая" другая функция была немного неправильной... Я просто имел в виду, что в этом нет ничего особенного или необычного.
Он определяет массив функций.