What is the NoInfer utility type in TypeScript 5.4?

Why Interviewers Ask This

This is a differentiating question used for senior and lead roles. Interviewers want to see if you can explain not just what happens, but why — and what the trade-offs are in different approaches.

Answer

NoInfer<T> (TypeScript 5.4) is a built-in utility type that prevents TypeScript from using a generic type parameter as an inference site. This gives you control over which call-site argument drives type inference. Problem it solves: function createStore<T>(initial: T, fallback: T): T { ... }. If you call createStore("hello", 0), TypeScript infers T as string | number — not the desired behavior. With NoInfer: function createStore<T>(initial: T, fallback: NoInfer<T>): T { ... } — T is inferred only from initial, and fallback must be compatible with the already-inferred T. Calling createStore("hello", 0) now gives a type error because 0 is not assignable to string. NoInfer is implemented as an intrinsic type (not expressible in user-land TypeScript). It is essential for APIs where one argument should constrain others without participating in inference itself.

Common Mistake

Don't just define the term — demonstrate that you understand when to use it and when not to. Showing awareness of trade-offs is what separates average from strong TypeScript candidates.