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;
Eine Sammlung mit einer Lücke besteht jede andere Prüfung: sie ist nicht null, nicht leer und ein gültiges Array. Die Lücke zeigt sich viel später als leere Zelle oder als Cannot read properties of undefined. Diese Prüfung fängt sie an der Grenze ab und gibt die Sammlung ohne die Nil-Werte im Typ zurück.
Akzeptiert werden ein Array, ein Set oder eine Map — bei einer Map werden die Werte geprüft, nicht die Schlüssel. Eine Sammlung, die selbst null oder undefined ist, geht unverändert durch: dieser Fall gehört zu requireNonNull, und zwei gestapelte Prüfungen sollen ihn nicht doppelt melden. Eine leere Sammlung besteht. Geprüft wird nur die oberste Ebene. Lücken im Array zählen als undefined, [1, , 3] wird also abgelehnt.
Parameter
Parameter
Typ
Beschreibung
values
unknown
Die zu prüfende Sammlung.
message(optional)
string
Die Meldung der Ausnahme. Ohne Angabe wird eine Standardmeldung verwendet.
Rückgabewert
unknown — dieselbe Sammlung, im Elementtyp ohne null und undefined.
Ausnahmen
Ausnahme
Bedingung
IllegalArgumentException
ein Element ist null oder undefined.
IllegalArgumentException
values ist weder Array noch Set noch Map.
Beispiele
Eine Zeile vor dem Schreiben prüfen
/**
* 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]);
}
Den Elementtyp verengen
import { requireNoNilElements } from "apps-script-utils";
const values: Array<string | null> = readColumn();
const names: string[] = requireNoNilElements(values, "the column has empty cells");
Was besteht und was wirft
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
Siehe auch
compact — entfernt die leeren Werte, statt sie abzulehnen.