Funciones
InstanceType
Lo que produce un constructor cuando lo llamas con `new`.
Qué es
La versión de clase de `ReturnType`, y existe por separado porque un nombre de clase significa dos cosas: el valor constructor y el tipo de instancia. `typeof Foo` es el constructor; `Foo` ya es la instancia. `InstanceType` importa cuando solo tienes el constructor — pasado como argumento, guardado en un registro, producido por una factoría.
Ejemplos
InstanceType<typeof Session>→SessionConstructorParameters<typeof Session>→[]InstanceType<typeof Session>['id']
→stringUna vez tienes el tipo de instancia, todo lo demás — `keyof`, acceso indexado, tipos mapeados — se aplica con normalidad.
Cada tipo resuelto de arriba lo imprimió TypeScript 5.9.3, no se escribió a mano.
Lo que no hace
- No acepta el nombre de la clase directamente. `InstanceType<Session>` es un error, porque `Session` ya es la instancia — quieres `typeof Session`.
- No incluye miembros estáticos. Esos viven en el constructor, que es lo que pasaste, no lo que obtuviste.
Conclusión
Un nombre de clase son dos tipos con una sola palabra. `typeof C` es el constructor, `C` es la instancia, y casi todo error confuso con genéricos de clase son esos dos intercambiados.