apps-script-utils (Русский) 2.1.1 Help

requireNoNilElements

function requireNoNilElements<T>(values: T[], message?: string): NonNullable<T>[]; function requireNoNilElements<T>(values: readonly T[], message?: string): readonly NonNullable<T>[]; function requireNoNilElements<T>(values: Set<T>, message?: string): Set<NonNullable<T>>; function requireNoNilElements<K, V>(values: Map<K, V>, message?: string): Map<K, NonNullable<V>>; function requireNoNilElements<T extends null | undefined>(values: T, message?: string): T; function requireNoNilElements(values: unknown, message?: string): unknown;

Коллекция с дыркой проходит любую другую проверку: она не null, не пуста и является корректным массивом. Пропуск всплывает гораздо позже — пустой ячейкой или Cannot read properties of undefined. Эта функция ловит его на границе и возвращает коллекцию с типом без null и undefined.

Принимается массив, Set или Map — у Map проверяются значения, а не ключи. Коллекция null или undefined проходит насквозь: этот случай относится к requireNonNull, и две проверки подряд не должны сообщать о нём дважды. Пустая коллекция проходит. Проверяется только верхний уровень, вложенный массив непрозрачен. Дырки в массиве считаются undefined, поэтому [1, , 3] отвергается.

Параметры

Параметр

Тип

Описание

values

unknown

Проверяемая коллекция.

message (необязательный)

string

Сообщение исключения. Если не задано, используется сообщение по умолчанию.

Возвращает

unknown — тот же объект коллекции с типом элементов без null и undefined.

Исключения

Исключение

Условие

IllegalArgumentException

элемент равен null или undefined.

IllegalArgumentException

values не является массивом, Set или Map.

Примеры

Проверка строки перед записью

/** * Appends a contact row, refusing a row with a gap in it rather than writing a * blank cell that shows up as a bug days later. */ export function appendContact( sheet: GoogleAppsScript.Spreadsheet.Sheet, name: string | null, email: string | null ): void { const row = requireNoNilElements([name, email], "name and email are both required"); sheet.getRange(sheet.getLastRow() + 1, 1, 1, row.length).setValues([row]); }
function appendContact(sheet, name, email) { const row = requireNoNilElements([name, email], "name and email are both required"); sheet.getRange(sheet.getLastRow() + 1, 1, 1, row.length).setValues([row]); }

Сужение типа элементов

import { requireNoNilElements } from "apps-script-utils"; const values: Array<string | null> = readColumn(); const names: string[] = requireNoNilElements(values, "the column has empty cells");

Что проходит, а что нет

requireNoNilElements([1, 2, 3]); // => [1, 2, 3] — the same array requireNoNilElements(new Map([["a", 1]])); // => the same Map requireNoNilElements([]); // => [] requireNoNilElements(null); // => null — not this guard's concern requireNoNilElements([1, undefined, 3]); // throws IllegalArgumentException requireNoNilElements([1, , 3]); // throws — a hole is undefined

Смотрите также

Исходный код

src/lang/array/requireNoNilElements.ts

23 September 2026

Эта документация сгенерирована нейросетью (Claude) на основе исходного кода библиотеки.