TypeScript Functions and Narrowing/Custom type guard with predicate

Teach TypeScript a reusable narrowing rule.

Section: Narrowing and Control Flow

Custom type guard with predicate

typescript
typescript
type User = { id: number; name: string };

const isUser = (value: unknown): value is User => {
  return typeof value === "object" && value !== null && "id" in value && "name" in value;
};
Explanation

Type predicates are useful for validation boundaries like JSON input or external APIs.

Learn the surrounding workflow

Compare similar commands or jump into common fixes when this command is part of a bigger troubleshooting path.

Related commands

Same sheet · prioritizing Narrowing and Control Flow
Narrow with `typeof`
Refine primitive unions using runtime checks.
OpenIn sheettypescriptsame section
Narrow with `instanceof`
Refine class-based unions using constructor checks.
OpenIn sheettypescriptsame section
Narrow with the `in` operator
Refine unions by checking property existence.
OpenIn sheettypescriptsame section
Exhaustive switch with `never`
Catch unhandled union members.
OpenIn sheettypescriptsame section
Type a function
Annotate parameters and return values.
OpenIn sheettypescript1 tag match
Type an async function
Return a typed promise from an async function.
OpenIn sheettypescript1 tag match