V TypeScript-e som takéto reflexie nikdy nepotreboval. Veci tam do seba pekne zapadajú už v compile time vďaka vlastnostiam ako discriminated unions alebo type predicates.
Uf brzdi to nekritické nadšenie, všetko má svoje plusy aj mínusy, nechápem ľudí ktorí sa tie mínusy snažia nevidieť. To, že si niečo nepotreboval neznamená, že to nepotrebujú ostatní. Tu ide o to aby som ten typ dal zistiť a checkovať rovnako v compile time ako aj v runtime (tak ako to umožňujú skoro všetky hi level kompilované jazyky). Lebo dajme tomu mame funkciu:
type LedColour = 'red' | 'green' | 'blue';
function lightUpTheLed(color: LedColour) {
...
}
lightUpTheLed("yellow"); // tu mi kompilator vyhodi chybu
const ledColour = await (await fetch('/api/get-color')).json<LedColour>(); // vrati "yellow"
lightUpTheLed(ledColour);
v poslednom riadku mi hodnota "yellow" prejde a celé sa mi to zosype až v tele funkcie, nevyskočí mi žiadna exception o nesprávnom type argumentu, runtime nevie kde nastala chyba - IDE mi neoznačí argument funkcie ako chybový. Načo je potom taký deravý typing? Ako pomáha to, ale často tá schýza vedie skôr k pocitu falošného bezpečnia.
Potom keď chcem napísať ORM framework, service kontainer, alebo validovať restové apiny, tak sú mi typescriptové typy na dve veci. A potom vznikajú projekty ako
https://github.com/gcanti/io-ts Kde si type checker píšem v novom DSL, nestačí mi na to jeden jazyk (typescript) potrebujem extra DSL s novou syntaxou zápisu typov, ktorý pokrýva len malú podmnožinu typingu TS, aby javascript runtime konečne rozumelo tomu istému čo som už raz vyjadril v TS.
Môj názor je presne opačný - ak potrebujem reflexie, aby som v runtime zistil typ objektu, tak je to nedostatok daného jazyka (prípadne nevhodný návrh kódu). TypeScript je pre mňa dôkaz, že sa to dá urobiť bez reflexií, jednoducho, čitateľne a v compile time.
píšeš to ako keby reflexia bolo niečo desivé:
var text = "ABC";
text.GetType().Name // vrati nazov typu premennej "text" ako "string";
Je na tomto niečo desivé? Nehovoriac o tom, že tú reflexiu / introspekciu najčastejšie používa priamo runtime keď ťa upozorní na chybu. Málokedy narazíš na situácie keď sa musíš na typy dopytovať sám (aj keď občas sa to hodí).