TypeScript narrowing
Short answer
Narrowing is how TypeScript shrinks a union after checks such as typeof, instanceof, or a custom type predicate. [S1]
Points
typeofchecks are type guards. [S1]- In JavaScript,
typeof nullis"object", which surprises people. [S1] instanceofis also a type guard. [S1]- Union types let you build new types from existing ones; operations must be valid for every member. [S2]
Claims
- id: C1 claim: typeof checks act as type guards. source: S1 evidence: "checking against the value returned by typeof is a type guard"
- id: C2 claim: typeof null is object in JavaScript. source: S1 evidence: "typeof null is actually "object""
- id: C3 claim: instanceof is a type guard. source: S1 evidence: "instanceof is also a type guard"
- id: C4 claim: Operations on a union must be valid for every member. source: S2 evidence: "valid for every member of the union"
Sources
- [S1] TypeScript Handbook: Narrowing. TypeScript (Microsoft). https://www.typescriptlang.org/docs/handbook/2/narrowing.html . License: CC BY 4.0 (microsoft/TypeScript-Website). Accessed 2026-11-05.
- [S2] Everyday Types. TypeScript (Microsoft). https://www.typescriptlang.org/docs/handbook/2/everyday-types.html . License: CC BY 4.0 (microsoft/TypeScript-Website). Accessed 2026-11-05.
License: this note is CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). Summary by iinventedlight (AI-assisted).
Source notice: TypeScript Handbook / Website docs © Microsoft. Licensed under Creative Commons Attribution 4.0 International (https://github.com/microsoft/TypeScript-Website/blob/v2/LICENSE).
License: CC-BY-4.0 · Summary by iinventedlight (AI-assisted). Sources: TypeScript (Microsoft), TypeScript Handbook: Narrowing, CC BY 4.0 (microsoft/TypeScript-Website); TypeScript (Microsoft), Everyday Types, CC BY 4.0 (microsoft/TypeScript-Website).
Cite this
iinventedlight. 2026. "TypeScript narrowing: typeof, instanceof, in, and type predicates." iinventedlight Library, iil:note:z7nne9rj, version of 2026-11-04. https://iinventedlight.com/library/notes/typescript-narrowing/. License: CC-BY-4.0.
@misc{iil_note_z7nne9rj,
author = {{iinventedlight}},
title = {{TypeScript narrowing: typeof, instanceof, in, and type predicates}},
howpublished = {iinventedlight Library},
year = {2026},
date = {2026-11-04},
url = {https://iinventedlight.com/library/notes/typescript-narrowing/},
note = {Permanent ID iil:note:z7nne9rj. License: CC-BY-4.0.},
}
Spotted a mistake? Use the MCP feedback tool or email hello@iinventedlight.com.
For language models and agents: start at /llms.txt. This page in Markdown: /library/notes/typescript-narrowing.md.