Ettevõtted Microsoft, Igalia ja Bloomberg on teinud ettepaneku lisada JavaScripti spetsifikatsiooni süntaks, mis määratleb tüübid selgelt, sarnaselt TypeScripti süntaksile. Praegu on ECMAScripti standardisse lisamiseks esitatud muudatuste prototüüp arutamiseks (Stage 0). Järgmise märtsi TC39 komitee koosolekul on plaanis liikuda ettepaneku esimese arutlusetapi juurde, kaasates ECMA ekspertkogukonna.
Selgelt määratletud tüübinformaatide olemasolu aitab vältida paljusid vigu arendusprotsessis, võimaldab rakendada täiendavaid optimeerimistehnikaid, lihtsustab tõrkeotsingut ja muudab koodi loetavamaks ning muu arendajate poolt lihtsamaks hooldada ja täiendada. Tüüpide toetust plaanitakse rakendada valikulise võimalusena — JavaScripti mootorsõidukid ja runtime'id, mis ei toeta tüüpide kontrollimist, ignoreerivad tüübinfot ja töötlevad koodi nagu varem, käsitledes tüübinfoks olevaid annotatsioone kui kommentaare. Kuid tüüpide kontrollimise tööriistad saavad kasutada olemasolevat teavet, et tuvastada vead, mis on seotud tüüpide vale kasutamisega.
Erinevalt JSDoc'i annotatsioonidest, mis määratakse kommentaaride kaudu, muudab tüüpide otsene määramine muutuja määratlemise konstruktsioonides koodi selgemaks, arusaadavamaks ja lihtsamaks redigeerida. Näiteks saavad TypeScripti toetavad integreeritud arenduskeskkonnad kohe varakult esitada vigade tuvastamise teavet tüpiseeritud JavaScripti koodis, ilma täiendava konversioonita. Lisaks võimaldab sisseehitatud tüüpide tugi käivitada programme, mis on kirjutatud tüpiseeritud JavaScripti dialektides, nagu TypeScript ja Flow, ilma ühes keeles teisendamata teise.

Из типов предлагается добавить «string», «number» и «boolean», которые можно будет использовать при определении переменных, параметров функций, элементов объектов, полей классов, типизированных массивов («number[]»). Предлагается также обеспечить поддержку объединённых типов («string | number») и дженериков. let x: string; function add(a: number, b: number) { return a + b; } interface Person { name: string; age: number; } function foo<T>(x: T) { return x; } function foo(x: string | number): string | number { if (typeof x === number) { return x + 1 } else { return x + «!» } }
Allikas: opennet.ru
