Pour reprendre ton exemple du modèle Person, imaginons que le modèle comporte un champ age: number et que lorsque l'application est dans un certain état, toutes les instances de Person doivent désormais être majeures pour être considérées valides. Avec un typage statique, on peut passer par une classe héritée AdultPerson par exemple, garder une référence à toutes les instances de Person et essayer de les caster en AdultPerson. C'est faisable bien que quelque peu fastidieux, mais ça ne nous donne pas l'assurance que ce sont des AdultPerson que l'on manipule dans les méthodes utilisant initialement des Person. Tandis qu'avec ObjectModel, on peut modifier à l'exécution le type lui-même :
Person.assert(function(p){ return p.age >= 18; });
Ici c'est une assertion donc on pourrait dire que ça sort du cadre du typage, mais je pourrais trouver un autre exemple où les ID deviennent des String et non plus des nombres.
Si tu parles du typage dynamique en JavaScript et non du typage fort offert par ObjectModel, il n'y aura pas d'exceptions levées, mais le principe est le même: on peut avoir une collection de personnes et décider tout à coup qu'une des personnes dans la collection aura un âge de type Date au lieu de Number. Ce sera permis par JavaScript mais interdit par TypeScript sans un cast approprié.
Les défenseurs du statique argumentent souvent en critiquant le côté glissant de cette approche. D'après eux, il vaut mieux garder des structures de données immuables et des hiérarchies "solides" de classes. Mais c'est cette même rigidité qui est décriée par les défenseurs du dynamique qui ne supportent plus d'avoir des hiérarchies immenses et impossibles à maintenir, avec des modèles de données imprimés sur feuilles A3.
Partager