sindresorhus/type-fest

Stricter `FixedLengthArray`

Open

#284 opened on Oct 12, 2021

View on GitHub
 (3 comments) (3 reactions) (0 assignees)TypeScript (471 forks)batch import
enhancementhelp wanted

Repository metrics

Stars
 (12,328 stars)
PR merge metrics
 (Avg merge 3d 5h) (11 merged PRs in 30d)

Description

FixedLengthArray could be improved to be stricter. Take this snippet for example:

const array: FixedLengthArray<number, 3> = [1, 2, 3];

array[4];

The final line should not compile since index 4 doesn't exist on the array.

Instead a type something like this could be used:

type Helper<Element, Length extends number, Rest extends Element[]> = Rest['length'] extends Length ? Rest : Helper<Element, Length, [Element, ...Rest]>;
export type FixedLengthArray<Element, Length extends number> = Length extends Length ? (number extends Length ? Element[] : Helper<Element, Length, []>) : never;

This uses TypeScript's tuple types directly instead of [index: number]: Element which is much safer.

Playground for current behavior Playground for proposed behavior

Contributor guide