TypeScript skill is not knowing syntax β it is designing types that make wrong code fail to compile without drowning the team in generics. These questions test the judgment scale: soundness boundaries, narrowing, API typing, and migration strategy, with notes on what strong answers cover.
What a strong answer covers
Compatibility by shape, not declaration; surprises: unrelated types interchangeable when shapes match, empty-object types accepting nearly everything, excess-property checks applying only to fresh literals. Branded/nominal-simulation types for IDs as the escape hatch shows applied depth.
What a strong answer covers
any as an infection vector, type assertions overriding the checker, bivariant method parameters, unchecked array indexing without noUncheckedIndexedAccess, and runtime data crossing boundaries unvalidated. The conclusion matters: types are compile-time claims, so validate at I/O boundaries with runtime schemas.
What a strong answer covers
any disables checking and spreads; unknown forces narrowing before use. Policy: unknown at untrusted boundaries, any banned or lint-restricted with justification comments, and noImplicitAny as table stakes. This tiny question reliably separates disciplined TypeScript users from JS-with-annotations users.
What a strong answer covers
typeof, instanceof, in, truthiness, discriminated-union tag checks, and control-flow analysis; user-defined guards with is predicates and their honesty burden (the compiler trusts you). A discriminated-union-with-exhaustive-switch example plus never-based exhaustiveness checking is the gold-standard answer.
What a strong answer covers
Overloads versus generics with conditional types, mapped types, and inference-friendly design β plus the judgment to stop: when the type gymnastics cost more than a small API redesign that makes the types simple. The 'stop' half is the senior half.
What a strong answer covers
Real utilities: typed pick/omit variants, form-state types derived from models, event maps keying handler payloads. Fluency with keyof, indexed access, and template-literal types applied to a genuine problem beats reciting the utility-type catalog.
What a strong answer covers
Making illegal states unrepresentable: loading/success/error unions where data exists only on success, versus boolean-and-optional soup allowing contradictions. Exhaustive switch handling as the payoff. This is the single most transferable TS design skill β weight it heavily.
What a strong answer covers
Check DefinitelyTyped, augment via declaration merging, local .d.ts declarations, wrap the library behind your own typed interface, and targeted assertions as the last resort with comments. Module-augmentation mechanics distinguish people who have actually done it.
What a strong answer covers
strictNullChecks as the big one, noImplicitAny, strictFunctionTypes and friends; additions like noUncheckedIndexedAccess and exactOptionalPropertyTypes with their ergonomics costs known. Reasoned flag opinions demonstrate they have configured real projects, not inherited configs.
What a strong answer covers
allowJs incremental adoption, boundary-first typing (APIs, shared utilities), checkJs with JSDoc as an on-ramp where useful, codemod tooling, strictness ratcheted module by module rather than a permanent loose mode, and any-count as a tracked metric. Team process β reviews, conventions β belongs in the answer.
What a strong answer covers
Static types vanish at runtime, so external data needs schema validation with types inferred from schemas (z.infer) to avoid drift; validation placed at API edges, environment parsing, and queue consumers. Candidates who type API responses with assertions alone have not been burned yet β this finds them.
What a strong answer covers
Project references with incremental builds, isolatedModules enabling transpile-only fast paths (esbuild/SWC) with typechecking parallelized in CI, interface extraction to shrink type surface, and diagnosing expensive types (tracing). Knowing typecheck and transpile are separable is the operational insight.
Skip the interviews entirely β get matched with pre-vetted TypeScript developers in 48 hours, $0 until you hire.
Need a custom question set?
Our free interview question generator builds a tailored list for any role, seniority, and focus area.
Try the interview question generator βFold two or three of these into your stack interview for product roles β the unknown-versus-any, discriminated-union, and runtime-validation questions carry the most signal per minute. Reserve the full set for roles owning shared libraries, API contracts, or migration work.
Restraint plus boundaries: seniors simplify APIs so types stay simple, validate at runtime edges, and treat clever conditional types as a cost. Candidates who show off type gymnastics without the judgment layer will tax your whole team's compile times and reviews.
Twenty minutes converting a small untyped module β an API client with a union-shaped response β tells you plenty: whether they reach for discriminated unions, how they treat the unknown boundary, and whether strictness is habit or performance.
Hire directly
Hire vetted TypeScript developers in the USA βOther interview guides
Vetted talent ready for US teams. No recruitment fees. Zero risk.
πΊπΈ Trusted by companies across the United States