← Back to Snippets
TypeScriptApr 2026

Generic runtime type guard

Narrow an unknown value to a typed interface at runtime — useful after fetch or JSON.parse.

snippet
function isType<T>(value: unknown, keys: (keyof T)[]): value is T {
  return (
    typeof value === 'object' &&
    value !== null &&
    keys.every(key => key in value)
  )
}

// Your interface
interface User {
  id: number
  name: string
  email: string
}

// Usage after fetch
const data: unknown = await fetchUser()

if (isType<User>(data, ['id', 'name', 'email'])) {
  console.log(data.name) // TypeScript knows it's a User ✓
}
Type GuardsGenericsRuntime Safety