#typescript #typescript-typings
#typescript #typescript-типизации
Вопрос:
Я наткнулся на этот тип (() => void)[] = []
, может кто-нибудь мне это объяснить
public functionName: (() => void)[] = []
это функция, которая не возвращает, но я не понимаю остальной синтаксис массива.
Ответ №1:
Это переменная типа: массив функций без параметров, которые не возвращают значения. Инициализируется пустым массивом.
Комментарии:
1. [] = [] это означает, что инициализируется пустым массивом.
2. Да, это то же самое, что: пусть arr: (() => void)[]; arr = [];
3. Просто в качестве предложения избегайте использования
[]
для массивов, если тип элемента является сложным типом (т.Е. Не Просто именем типа).Array<() => void>
гораздо более читаемый IMO.
Ответ №2:
Это массив функций
public functionName:
(() => void)[] // array of functions that take no parameter and return nothing
= [] // initialization of functionName with an empty array
Ответ №3:
public numbers: number[] = []
Это переменная, называемая числами, и это массив чисел.
Теперь важная часть — понять
()=>void
(x) => return x
Это простое лямбда-выражение (вы можете подробнее узнать об этом в Google). Но суть его в том, что левая часть — это переданные параметры, а правая часть — это реализация.
Итак, ваше выражение представляет собой массив, содержащий лямбда-выражения. Я просто уточняю ответ Томаша Из, чтобы вы могли лучше его понять.
Комментарии:
1. Это не обязательно должны быть лямбда-выражения; это любая функция, которая может быть вызвана с нулевыми аргументами.
Ответ №4:
Может быть, немного поздно, и ответ уже дан, но я все же хочу дать более глубокий.
Тип X[]
означает массив X
.
Тип ()=>void
означает функцию, которая ничего не возвращает.
В выражениях типа вы также можете группировать объекты с помощью круглых скобок, чтобы избежать несоответствий.
Таким образом, тип (X)
является тем же типом, X
что и .
So (()=>void)[]
означает массив функций, которые ничего не возвращают.
Примечание: Ничего, это не то же самое, что never
. По крайней мере, не в этом случае. TS — такая классная система типов по сравнению с таким беспорядком языка (JS)… Он так старается быть крутым и потрясающим, и при том же типе его перетаскивает JS.
Функции в JS могут останавливаться / завершаться / завершаться без возврата значения. Это в функциональных языках, где каждая функция возвращает что-то, означает возврат Unit
… как и в типе, который имеет только одно представление во время выполнения: кортеж нулевой арности. Сколько существует кортежей нулевой арности? … 1. Значение, которое означает, что процедура завершилась, НО также и значение, которое не содержит соответствующей информации (его можно игнорировать).
С другой стороны, есть случай, когда функции фактически ничего не возвращают. Это означает, что функции либо терпят неудачу, либо фактически никогда не завершаются (т.е. ()=>{while(true){}}
).
Тот «тип», который его представляет, известен как never
в TS, Void
в Haskell, Nothing
в Scala и Kotlin, и да, это так
Unit
Тип, о котором я говорил ранее, на самом деле не имеет представляющего типа в TS … (хотя его можно легко представить с помощью типа null
, undefined
, и в некоторых случаях void
). В Kotlin и Scala он известен как Unit
, а в Haskell упоминается как Unit, но записывается ()
(кортеж нулевой арности). В Java это каким-то образом представлено void
методами, но если вы спросите меня, я думаю, что это просто плохой дизайн. Это не совсем методы, которые возвращают единицу, а методы, которые не возвращают (как в TS и JS).
Я думаю, это просто плохой дизайн.