function isTuple<T extends unknown[]>(
arr: unknown,
...guards: { [K in keyof T]: (x: unknown) => x is T[K] }
): arr is T {
return Array.isArray(arr) && guards.every((g, i) => g((arr as unknown[])[i]))
}A generic isTuple validator checks each element with its own type guard for precise tuple types.
Challenge: Implement isTuple<T, U>(x: unknown, guardA: (a: unknown) => a is T, guardB: (b: unknown) => b is U): x is [T, U] β checking that x is a two-element array with each element matching its guard.
isTuple([1, 'a'], isNumber, isString) // β true
isTuple([1, 2], isNumber, isString) // β false