The following block excludes the type undefined
from a TypeScript tuple or array.
You can also replace undefined
with something else to exclude another type,
but YMMV, depending on the type and how you use it.
export type FilterUndefined<T extends unknown[]> = T extends [] ? [] :
T extends [infer H, ...infer R] ?
H extends undefined ? FilterUndefined<R> : [H, ...FilterUndefined<R>] : T
Usage:
type SomeTuple = [string, undefined, number]
type FilteredTuple = FilterUndefined<SomeTuple> // type becomes [string, number]