Funkcje
InstanceType
To, co konstruktor produkuje, gdy wywołasz go przez `new`.
Czym jest
Klasowa wersja `ReturnType`, a istnieje osobno dlatego, że nazwa klasy znaczy dwie rzeczy: wartość konstruktora i typ instancji. `typeof Foo` to konstruktor; `Foo` to już instancja. `InstanceType` liczy się wtedy, gdy masz wyłącznie konstruktor — przekazany jako argument, trzymany w rejestrze, wyprodukowany przez fabrykę.
Przykłady
InstanceType<typeof Session>→SessionConstructorParameters<typeof Session>→[]InstanceType<typeof Session>['id']
→stringGdy masz już typ instancji, wszystko inne — `keyof`, dostęp indeksowany, typy mapowane — stosuje się normalnie.
Każdy rozwinięty typ powyżej wypisał TypeScript 5.9.3, nie ręka człowieka.
Czego nie robi
- Nie przyjmuje bezpośrednio nazwy klasy. `InstanceType<Session>` to błąd, bo `Session` jest już instancją — chodzi ci o `typeof Session`.
- Nie obejmuje składowych statycznych. Te żyją na konstruktorze, czyli na tym, co podałeś, a nie na tym, co dostałeś.
Wniosek
Nazwa klasy to dwa typy w jednym słowie. `typeof C` to konstruktor, `C` to instancja, a niemal każdy mylący błąd generyka klasowego to te dwa zamienione miejscami.