Aby som roztal kruh, uznavam, ze bola chyba, ze som napisal, ze
TypeScript ma definicie pomaly pre vsetko.
Radsej som mal napisat:
pre vsetko co ma zmysel. Ludia, ktori pisu typove definicie pre Sanctuary a Ramdu si evidente necitali, ze TypeScript nie je jazyk pre nich a nikdy nebude a to, ze vobec splodili nejake definicie je vacsia chyba ako keby ziadne neboli. Potom by tu ludia nenariekali, ze TypeScript nema taky silny typovy system, akeho su tieto kniznice hodne.
Nie, nie, uz som pochopil. Vam vadi, ze vasa oblubena kniznica, inspirovana typovym systemom Haskellu a naimplementovana v JavaScripte, nie je otypovatelna TypeScriptom, ktory je inspirovany typovym systemom nominalne typovanych imperativnych jazykov ako C++ a Java, a ktory aby rozumne spolupracoval s JavaScriptom pouziva strukturalne subtypovanie a type erasure pri kompilacii. Vystihol som to presne?
Ne, "type-erasure" (to se snad v kontextu TypeScriptu ani nepouziva) s tim nejak nesouvisi. Sanctuary pouziva runtime kontrolu typu jako svoje reseni typovani, protoze JS zadne rozumne nema. Kdyby TypeScript mel silny typovy system ala Scala (bezi take nad JVM jako Java, takze ocividne to jde, kdyz se chce), Haskell nebo Idris tak by stacilo napsat typove soubory pro knihovnu, vypnout runtime checky a vse by bylo dokonale - vse by se zkontrolovalo pri prekladu. Bohuzel to zatim v TS neni.
Cakat mozte donekonecna, lebo nic take v TypeScripte nikdy nebude, kedze je to explicitne zadeklarovane ako non-goal. Cas pre vas pohladat iny jazyk alebo vyvinut vlastny.
Taktiez, to ci TypeScript dokaze poskytnut kvalitne definicie nie je podmienene tym, ci je kod pisany v TypeScripte alebo v JavaScripte, ale tym, ci kod/kniznica operuje s typovym systemom podobnym ako ma C# alebo Java. Ak ano, nevidim dovod, preco by sa nedali urobit korektne ex post definicie v TypeScripte.
Naopak, ak je nieco v TypeScripte napisane, neznamena to automaticky, ze to poskytuje dobre typove definicie alebo inak nenarusuje semantiku TypeScriptu, vid. Angular2+ a jeho handlovanie access modifierov na komponentoch pri pristupe z templatov.
Specialne pre vas som zrekonstruoval nasledovnu konverzaciu:
Ja to chapem tak, ze TypeScript sa snazi prepasovat aspon naznak klasickej enkapsulacie a "tradicneho" OOP z jazykov ako su C++, C# a Java do JavaScriptu.
To uz dela JavaScript sam, ES2015 ma tridy, na to neni potreba TypeScript.
A kde ma triedy ES5?
Nevim, proc zminujete starou verzi EcmaScriptu. Primo v ES5 se bezne front-endy nevyviji (bavime se o vaznem vyvoji - tema je o Angularu, ne lepeni par radek v jQuery), stejne jako se primo neposila nezkompilovany TypeScript prohlizeci. Ostatne neni duvod vyvijet v ES5, kdyz mate dobre transpilery (jinak by ani ten TypeScript nebyl pouzivany korporaty, kdyby nebyla dobra podpora).
Kto napisal, ze vyvijam v ES5. Bavime sa o TypeScripte. Neverili by ste, ale jeden z dovodov preco TypeScript vznikol je aj to, aby bolo mozne vytvarat triedy zo specifikacie ES2015 uz v ES5. Kde je prosim vas napisane, ze TypeScript musite pouzivat pre pisanie
frontendov v
browseroch. Viete, ze stale umoznuje kompilovat do ES3? To ma TypeScript dropnut podporu ES3, lebo vacsina browserov podporuje skoro celu ES2015 sepcifikaciu? Co ak mate biznis logiku na backende napisanu v TypeScripte?
"type-erasure" [...] se snad v kontextu TypeScriptu ani nepouziva
No, to je ta zakladna vec, ktoru TypeScript kompiler robi, dokonca sa tak aj vola a je to by design.