If we remove the "sensible" requirement:
type NonEmptyArray = [any, ...any[]]
type NonEmptyArray = [unknown, ...unknown[]]; const nea: NonEmptyArray = []; // ^^^ Type '[]' is not assignable to type 'NonEmptyArray'. // Source has 0 element(s) but target requires 1.
type NonEmptyArray<T> = [T, ...T[]];
If we remove the "sensible" requirement: