Podľa mňa riešenie typov v jazykoch je nezmyselné. Vôbec nevidím dôvod aby typy boli viazané na premennú a nie dáta.
JavaScript má podľa mňa skoro najzmyselnejsie to riešené, s výnimkou obskurdnosti, teda ako su riešené určité situácie kedy robíme operaciu nad 2 rozličnými typmi.
Druhá vec je že stačí rozlišovať toľko typov, aby sme rozlisili pracu s nimi v programe. To znamená:
Čísla
Stringy
Booleany
Array
Object
Null
nič iné netreba. Nepochopím jazyky kde máte 8 rôznych typov na podpísanie premennej, uchovavajucej dáta s ktorými sa pracuje rovnakým spôsobom. Viď char vs string, neni char vlastne string dĺžky 1? Alebo Int vs Float, Není Int vlastne Float s 0 desatinnými miestami? Ak hovoríme že sa ukladajú trocha inak, tak o koľko? Šetríme tam bajty dát? Dnes PC fakt nie sú stroje kde by bajty urobili rozdiel, navyše keď dáta v premenných tvoria najmenšie množstvo dát uložených v operačnej pameti.
Navyše proč to musíme definovat explicitne? Není z dát jasné, čo premenná obsahuje?
Keby v JS boli zakázané veci ako robenie operácie nad nekompatibilními typmi dát, tak by JS podľa mňa to mal najsamlepsie poriesene.
---
TS, hmm, jak ťa tlačí k OOP mi vadí, nehovorím že neni situácia kedy by sa nedalo využiť OOP, ale myslím že by programátor sa nemal prispôsobovať v tom aké paradigma musí zvoliť v ktorom jazyku.