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