Typescript Series - First a Last of Array Type

Rád bych začal tím, že tuto sérii dělám, abych se naučil a lépe porozuměl Typescriptu, takže mě neváhejte opravit nebo mě kontaktujte.

Existuje mnoho způsobů, jak získat první nebo poslední prvek pole, pojďme si některé prozkoumat:

const arr = [1, 2, 3, 4, 5];

const first = arr[0];
const last = arr[arr.length - 1]

// or

const [first, ...rest] = arr;
const [...rest, last] = arr;

K vytvoření našich typů použijeme přístup destrukcí pole

Typy

type First<Type extends unknown[]> = Type extends [infer R, ...unknown[]] ? R : never

type Last<Type extends unknown[]> = Type extends [...unknown[], infer R] ? R : never

U obou námi požadovaných typů se řídíme stejným principem, pojďme si tedy jeden rozebrat.

Pochopení klíčového slova odvozeného

Klíčové slovo infer lze použít v rámci podmínky v podmíněném typu k vložení odvozeného typu do proměnné. Tato odvozená proměnná pak může být použita v podmíněných větvích.

First<Type extends unknown[]> Type v zásadě rozšiřuje pole neznámého typu, nezajímá nás typ, chceme jen získat první/poslední prvek.

Type extends [infer R, ...unknown[]] ? R : never dále zkontrolujeme, zda Type rozšiřuje pole o více než jeden prvek, zatímco odvozujeme typ z prvního/posledního destrukovaného prvku a dostaneme i zbytek. Poté, pokud kontrola projde, vrátíme první/poslední prvek, jinak vrátíme nikdy (ignorováno TS).

Děkuji!

najdete mě zde Můj Twitter