type R = FindFirst<[true, 1, 'x', 3], string> // 'x'
type R = FindFirst<[true, 1, 'x', 3], number> // 1
type R = FindFirst<[string, number, 1], 1> // widen: 1 | undefined
type R = FindFirst<[true, number | string], string> // unionMiss: string | undefined
type R = FindFirst<Array<string>, string> // string
type R = FindFirst<Array<1 | 2 | 'x'>, number> // 1 | 2 | undefined
type R = FindFirst<Array<string | number>, number | string> // string | number
type R = FindFirst<Array<number>, 1> // widen: 1 | undefined
type R = FindFirst<Array<string | number>, number> // unionMiss: number | undefined
type R = FindFirst<[true, 1, 'x'], 2> // never
type R = FindFirst<string[], number> // never
performs widen match.
Default to true
.
With widen match, a narrowed type will match its widen type.
e.g. matching 1
against number
yields 1 | undefined
The widen behavior can be customized by Options['$widen']
🦴 utilities 🔢 customizable
Find the first type in the array or tuple
A
that matchesCriteria
.If the
Criteria
is not met, it will return `never'.