
If you are preparing TypeScript interview questions for 3 years experience, the useful thing to know early is that the question list barely changes between levels. "interface versus type" gets asked of a fresher, a mid-level engineer, and sometimes a staff engineer as a warm-up. What changes is the bar your answer is measured against.
At roughly three years, interviewers are probing whether you can model real, messy data safely and write reusable, readable typed helpers that survive code review. They are generally not checking whether you can invent a recursive conditional type on a whiteboard. That distinction is the whole guide: mid-level candidates are expected to consume and apply the type system cleanly, while senior candidates are expected to design the constraints other people have to work inside.
One honest note before the questions. The claims below rest on recurring patterns across 2026 interviewer-oriented material, hiring notes and production write-ups, rather than on single dated forum threads. Direct, dated excerpts naming exact mid-level TypeScript prompts from the last 12 to 18 months are sparser than the aggregated guidance, so treat the frequency framing as "recurring in this material" rather than statistically sampled.
It is tempting to read level guides as three separate question banks. They are closer to one question bank with three different marking schemes.
A fresher answering "any versus unknown" can pass by explaining that unknown forces you to narrow before use. A mid-level answer is expected to reach for a concrete example from production-like code and name the trade-off, something closer to "I prefer unknown at the boundary and parse with a schema, because the alternative is an as cast that lies about the runtime shape". A senior answer moves further out again, into how that rule gets enforced across a codebase other people maintain.
So the axis worth holding in mind is not which questions appear. It is what your answer is evaluated for.
| Mid level, around 3 years | Senior and above | |
| What is being tested | Can you model real, messy data safely | Can you design constraints a team lives inside |
| Typical framing | "Type this function that consumes external JSON" | "Set the rules so invalid states cannot compile anywhere" |
| Code expectation | Reusable, readable typed helpers that survive review | Library-grade utilities, design-system-scale APIs |
| Judgment signal | Choosing the simpler union over the clever one | Justifying complexity cost to the next engineer |
| Common red flag | Defaulting to any or as casts | Dogmatic rules with no reasoning attached |
Two counterexamples worth stating plainly, because the table above can read as harder than it is. A senior candidate can still be asked "interface versus type" as an opener, and a mid-level engineer at a small team may well get a migration question because they are the person who would do the migration. Level guides describe the centre of a distribution, not a boundary.
If you are earlier than this, GreatFrontEnd's guide to learning TypeScript covers the ground before interview prep starts. If you are further along, the senior TypeScript interview guide covers the tier above this one, where the focus moves from applying the type system to designing production APIs and state models with it.
These surface repeatedly in the mid-level sections of 2026 guides and interviewer notes.
The answer that lands covers declaration merging on interfaces against the union, intersection and mapped flexibility of type aliases, then gives a reasoned rule of thumb based on the codebase and the shape being modeled: interfaces are useful when declaration merging or interface extension is intentional, while type aliases are necessary for unions and support broader type-level composition. What interviewers tend to listen for is whether you have a reason, not whether you picked their preferred option.
any turns the checker off and spreads through whatever it touches. unknown quarantines the uncertainty and forces you to narrow before use. The follow-up is usually whether you would ever still reach for any, and a reasonable answer treats it as deliberate, time-boxed debt with a plan to remove it, rather than as a permanent escape hatch.
This is the closest thing to a mid-level separator in the material. It is usually phrased as parsing JSON or data you do not control. A strong answer starts the value as unknown, narrows explicitly with type guards or a runtime schema validator, and avoids an as Order cast that asserts a shape nobody verified. Mentioning that types are erased at compile time, so nothing in the type system protects you from a malformed response, is a signal that tends to land well here.
The classic prompt is a function that reads a property by key while preserving the exact types, the shape where K extends keyof T does the work. Interviewers usually follow up on how inference flows through the constraint, and whether you can explain it without freezing.
How typeof, instanceof, the in operator and user-defined predicates written as x is Foo cause the checker to treat a value as narrower inside a branch. This is a comprehension check more than a coding one.
Partial, Required, Readonly, Pick, Omit, Record and ReturnType come up often. The differentiator at this level is composing two or three of them into an update payload or a filtered shape, rather than listing what each one does.
Model async UI or request state so that invalid combinations cannot be represented, the case where isLoading, error and data are all somehow present at once. Optional follow-up is exhaustiveness, usually via a never based default case, so that adding a new state surfaces every place that needs updating.
Conceptual checks that appear in mid-level sections: shape-based compatibility rather than nominal typing, and the fact that types exist only at compile time.
What strict: true actually changes day to day, and what individual flags like noImplicitAny and strictNullChecks do on their own. Less universal but still in range: basic mapped types, typeof in type position, enums against literal unions, simple decorators where the stack uses them, and ambient declarations or @types packages.
Three properties tend to show up in a solid mid-level answer. It reaches for a concrete example from production-like code. It names a trade-off out loud. And it walks through narrowing or a constrained generic without stalling.
The weak patterns reported in interviewer notes are consistent: defaulting to any or as casts for external data, being unable to explain why unknown is safer, treating types as a runtime guarantee, and reciting definitions without modelling a real state or API payload.
There is a subtler one worth naming. Reaching for an overly clever recursive mapped type can itself read as a mild negative at this level if readability suffers. Restraint is part of what is being assessed, not a lack of depth.
Being explicit about this saves preparation time, because the mid and senior versions of TypeScript interviews get blurred together in a lot of public lists.
Generally not expected at this level: deep type-level programming such as recursive conditional types, complex infer extraction chains, variance in its co-, contra- and bivariant forms, or building library-grade utility types from scratch. Also out of scope are architecture and process questions such as migrating a large JavaScript codebase, setting team-wide type rules, or designing types other people have to live inside. Staff-level judgment prompts, including deliberate any usage under extreme constraints, sit above this tier too.
Those belong to the senior and lead conversation. If you want to see what that tier looks like, the senior TypeScript interview questions guide covers it directly, which is a useful preview of where your preparation goes next rather than something to study now.
TypeScript 6.0 became generally available around March 2026 and is positioned as the final major release built on the JavaScript codebase, preparing the way for TypeScript 7.0, the Go-based native compiler with multi-threaded, substantially faster checking. TypeScript 6.0 added es2025 target and lib support, Temporal types, and adjustments around context sensitivity and type ordering stability that help with migration, alongside various deprecations and alignments.
For a mid-level interview this matters less than the release notes suggest. Features worth recognizing include the satisfies operator from TypeScript 4.9, const type parameters from TypeScript 5.0 and their improved literal preservation, and using for explicit resource management from TypeScript 5.2 where the stack calls for it. An interviewer who cares about currency may ask whether you have used them or can explain the problem they solve. Trivia on every TypeScript 6.0 flag is uncommon at this level.
Worth noting honestly: data on how often TypeScript 6.0 comes up in mid-level interviews is thin, because the release is recent relative to most published question banks. Most 2026 mid-level lists still centre on the stable core of generics, narrowing, utility types and safe boundary typing.
As AI-assisted coding has become more common, an interviewer may also probe whether you understand the types an assistant suggested rather than accepting them blindly.
as casts or any as the default solution for external data.unknown narrowing improves safety for whoever reads the code next.Many public question lists mix experience levels or recycle older questions, so a list claiming to be mid-level often is not. Direct, dated excerpts from Glassdoor, Blind or LeetCode Discuss naming exact mid-level TypeScript prompts from the last 12 to 18 months are sparser than the aggregated interviewer guidance this guide draws on.
Compensation and pass-rate figures are absent from the sources behind this guide, so none are quoted here. Recent hiring-process changes at named companies are also out of scope for a level-focused guide like this one.
Is this the same as a senior TypeScript interview, just easier? Not quite. The question list overlaps heavily, but the marking scheme differs. At three years you are assessed on applying the type system cleanly to real data. Senior rounds move toward designing constraints a team inherits, which is a different skill rather than a harder version of the same one.
How much of the newest TypeScript do I need? Fluency with satisfies and literal preservation is reasonable to expect. Detailed knowledge of TypeScript 6.0 flags is uncommon at this level, and the stable core carries most of the weight.
Do I need to know Zod or a specific validation library? The concept matters more than the library. What tends to land is explaining why runtime validation exists at the boundary at all, given that types are erased. Naming a tool you have actually used is better than naming the one you think they want.
Is reaching for a clever type ever a bad idea in an interview? It can be. If a simpler union or utility composition would be clearer, the clever version can read as a maintainability risk. Saying "this is correct but too clever for this codebase" is a positive signal.
How does this differ from the JavaScript experience-level guides? Those cover language fundamentals at 2 years and 5 years. This guide assumes that ground and focuses on the type system layered on top of it.
The fastest way to get comfortable with TypeScript interview questions for 3 years experience is to type real code under a timer rather than reading answer keys. GreatFrontEnd's TypeScript interview questions cover implementations, utility types and typed component patterns with reference solutions and tests written by ex-FAANG engineers, so you can check your instinct on a specific pattern against a working answer instead of guessing whether you got it right.
A practical set of TypeScript interview questions for senior frontend developer interviews, with coding problems on generics, unions, utility types, and React TypeScript.
Learn TypeScript in 2026 with a practical path from JavaScript basics to type annotations, unions, generics, narrowing, React props, and project migration.
Master TypeScript React best practices by avoiding these 12 common mistakes. Learn proper component typing, hooks patterns, and API integration techniques.