How do you narrow a union type?
Assesses fundamental understanding of TypeScript conventions, runtime behavior, and memory/performance considerations.
Hiring managers look for precision, avoidance of ambiguous jargon, and ability to explain trade-offs under real production conditions.
Narrowing reduces a union to a subset within a control-flow branch. Techniques:
- typeof for primitives.
- instanceof for classes.
- The in operator for property presence.
- Discriminated unions using a literal field, the most scalable pattern.
- User-defined type guards returning
x is T. - Literal/array checks and truthiness for null and undefined.
type Shape =
| { kind: 'circle'; radius: number }
| { kind: 'square'; side: number };
function area(s: Shape): number {
switch (s.kind) {
case 'circle': return Math.PI * s.radius ** 2;
case 'square': return s.side ** 2;
}
}
A discriminated union plus exhaustive switching gives compile-time safety when new variants are added.
Candidate Response Strategy & Interview Tips
- Start with a concise one-sentence summary: Deliver a direct, confident answer first before expanding into nuances.
- Demonstrate real-world trade-offs: Discuss where this approach excels and when you would avoid it in production systems.
- Discuss complexity & edge cases: Proactively explain time/space complexity or boundary conditions (null values, scale limits).
- Prepare for interviewer follow-ups: Technical hiring panels frequently probe deeper into concurrency, backward compatibility, or alternative libraries.