Возвращает последний элемент индексного массива когда этот массив не пустой. Если же массив пустой то:
- Будет брошено исключение
UnexpectedEventError
, если указан 2-ой параметр со значением{ mustThrowErrorIfArrayIsEmpty: true }
. При этом TypeScript будет считать, что если функция отработает без ошибок, а указанный явно или неявно тип элементов не может принимать значенияnull
и/илиundefined
, то возвращаемое значение тоже не может бытьnull
илиundefined
. - Будет возвращён
null
, если 2-ого параметра не указано. В этом случае при строгих настройкахTypeScript
обяжет проверить возвращаемое значение наnull
, прежде чем использовать его.
Данная функция не просто заменяет выражения типа
targetArray[targetArray.length - 1]
, но и позволяет
гарантировать, что последний элемент массива существует.
Примеры
const sample: Array<string> = [ "alpha", "bravo", "charlie" ];
const lastElementOfSample: string | null = getLastElementOfArray(sample);
lastElementOfSample
будет иметь значение
"charlie"
.
В этом синтетическом примере мы заранее знаем значение всех элементов массива
sample
, чего на практике почти не бывает, поэтому
возвращаемое значение может быть null
.
Другими словами, предполагается, что массив может быть пустым все зависимости от того, знаем
мы об этом заранее или нет (на практике обычно не знаем).
console.log(lastElementOfSample.length);
Возникнет ошибка TypeScript TS18047
«'lastElementOfSample' is possibly 'null'», потому что свойство
length
имеется у строкового типа (и массивов),
а константа lastElementOfSample
,
возможно, имеет значение null
.
Прежде, чем вызывать у lastElementOfSample
какие-либо строчные
свойства и/или методы (в частности, length
)
необходимо доказать TypeScript-y, что значение
lastElementOfSample
не является null
.
Сделать это можно, например, с помощью условной конструкции
if (lastElementOfSample !== null) {/* ... */}
—
тогда в пределах if-блока TypeScript будет считать данное значение
не являющимся null
.
Есть и другие решения, но чего категорически не должен делать
программист, заявляющий владением языком TypeScript — это использовать
выражения типа lastElementOfSample!.length
, так как это большая трещина в качестве кода.
К тому же, обычно использование подобной функциональности имеет массовый
характер, сопровождающийся применением типа any
и других послаблений,
сводящих на нет смысл использования языка TypeScript.
const notNullLastElementOfSample: string = getLastElementOfArray(sample, { mustThrowErrorIfArrayIsEmpty: true });
notNullLastElementOfSample
как string
, а не
string | null
, так как вместо возврата null
в случае пустого массива будет выброшено исключение
UnexpectedEventError
.
Разумеется, Вы можете обработать это исключение с помощью try/catch
,
но в общем случае это не даст никакого преимущества перед
рассмотренной выше проверкой на null
.
Быстрый ввод в интегрированных средах разработки семейства IntelliJ IDEA
Использование Live template-ов в семействе интегрированных сред разработки IntelliJ IDEA позволяет вводить код такой так выражения вызова функции быстрее. Для получения доступа к Live Template-ам библиотеки YDEE потребуется установить официальный плагин этой библиотеки.
Пошаговое описание процесса использования шаблона
Если Вы ранее не пользовались Live template-ами, то пусть Вас не пугает приведённая ниже объёмная инструкция: при сформированной привычке использования Live template-ов (эта привычка сходна с повседневным применением сочетаний клавиш) скорость выполнения описанных ниже операций займёт считанные секунды.
- Скопируйте в буфер обмен имя переменной, содержащей массив, либо само выражение массива. Чтобы среда разработки смогла автоматически заполнить позицию первого параметра нужным значением, сформируйте привычку делать это копирование перед тем, как начинать вводить Live template функции getLastElementOfArray.
- Начните набирать имя функции — addElementsToArray.
Подсветится 2 варианта автодополнения:
- Иконка тремя наложенных друг на друга разноцветными кругами - это просто автодополнение имени функции; стандартная функциональность среды разработки. Нажатие на Enter введёт полное имя функции, а также при необходимости объявления импорта этой функции. Неплохо, однако это не предел, до которого можно частично автоматизировать процесс.
- Иконка с клише — это как раз нужный шаблон.
Нажмите Enter.
Произойдёт вставка шаблона кода, при этом первого параметра
targetArray
будет автоматически выделено и заполнено содержимым буфера обмена. Поскольку при следовании данному руководству менять подставленное значение параметра на другое не требуется, выйдете из режима редактирования параметра, нажав Enter ещё раз.
- Удалите лишний код.
Вы можете использовать алиас этого LiveTemplate-а —
gleoa
, состоящий из первых букв всех слов, которые включает в себя имя
функции.
Однако недостаток таких алиасов в том, что их приходится запоминать, а для того, чтобы получить подсказку
getLastElementOfArray, достаточно лишь помнить, с чего начинается это имя
функции.