Microsoft, Igalia in Bloomberg so predlagali, da se v specifikacijo JavaScript doda sintaksa eksplicitne definicije tipov, podobna tisti, ki se uporablja v TypeScriptu. Prototip predlaganih sprememb za vključitev v standard ECMAScript je trenutno v predhodni razpravi (faza 0). Na prihajajočem marčevskem sestanku odbora TC39 naj bi predlog prešel v 1. fazo pregleda, v kateri bo sodelovala strokovna skupnost ECMA.
Izrecno definirane informacije o tipu bodo pomagale preprečiti številne napake med razvojem, omogočile dodatne tehnike optimizacije, poenostavile odpravljanje napak ter naredile kodo bolj berljivo in lažje spreminjanje in vzdrževanje s strani razvijalcev tretjih oseb. Predlaga se, da se podpora za tipe implementira kot izbirna funkcija: motorji in izvajalna okolja JavaScript, ki ne podpirajo preverjanja tipov, bodo prezrli opombe o tipih in obdelali kodo kot prej, informacije o tipu pa bodo obravnavale kot komentarje. Vendar pa bodo orodja za preverjanje tipov lahko uporabila razpoložljive informacije za prepoznavanje napak, povezanih z nepravilno uporabo tipov.
Za razliko od informacij o tipu, ki so podane z uporabo opomb JSDoc v komentarjih, bo neposredno določanje tipov znotraj definicij spremenljivk naredilo kodo bolj vizualno, razumljivo in lažje za urejanje. Integrirana razvojna okolja s podporo za TypeScript bodo na primer lahko takoj označila napake v tipizirani kodi JavaScript brez dodatnih transformacij. Poleg tega bo vgrajena podpora za tipe omogočila izvajanje programov, napisanih v tipiziranih dialektih JavaScript, kot sta TypeScript in Flow, brez prevajanja iz enega jezika v drugega.

Predlaga se dodajanje tipov "string", "number" in "boolean", ki jih je mogoče uporabiti za definiranje spremenljivk, parametrov funkcij, elementov objektov, polj razredov in tipiziranih polj ("number[]"). Predlaga se tudi podpora za tipe združevanja ("string | number") in generične oblike. let x: string; function add(a: number, b: number) { return a + b; } interface Person { name: string; age: number; } function foo (x: T) { return x; } function foo(x: niz | število): niz | število { če (typeof x === število) { return x + 1 } drugače { return x + "!" } }
Vir: opennet.ru
