JS Built-ins
TypeScriptadvanced

Type Guard β€” isTuple

πŸ“– Usage Example
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.

Type Guards: Tuple Checking

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
πŸ’‘ Hints (1)
  • β€’ Check Array.isArray, length === 2, and both guards.