Functions
Instance Type
What a constructor produces when you call it with new.
What it is
The class version of ReturnType, and the reason it exists separately is that a class name means two things: the constructor value and the instance type. typeof Foo is the constructor; Foo is already the instance. InstanceType matters when you only have the constructor — passed as an argument, stored in a registry, produced by a factory.
Examples
InstanceType<typeof Session>→SessionConstructorParameters<typeof Session>→[]InstanceType<typeof Session>['id']→stringOnce you have the instance type, everything else —
keyof, indexed access, mapped types — applies as normal.
Each resolved type above was printed by TypeScript 6.0.3, not written by hand.
What it does not do
- It does not accept the class name directly.
InstanceType<Session>is an error, becauseSessionis already the instance — you wanttypeof Session. - It does not include static members. Those live on the constructor, which is the thing you passed in, not the thing you got out.
Takeaway
A class name is two types wearing one word. typeof C is the constructor, C is the instance, and almost every confusing class-generic error is those two swapped.

