Microsoft, Igalia ja Bloomberg on teinud ettepaneku lisada JavaScripti spetsifikatsiooni selgesõnaline tüübimääratluse süntaks, mis sarnaneb TypeScriptis kasutatavaga. ECMAScripti standardisse lisatavate kavandatud muudatuste prototüüp on praegu esialgsel arutelul (etapp 0). TC39 komitee eelseisval märtsikuu koosolekul on kavas liikuda läbivaatamise 1. etappi, kus osaleb ECMA ekspertide kogukond.
Selgelt määratletud tüübiteabe olemasolu aitab vältida paljusid vigu arenduse ajal, võimaldab kasutada täiendavaid optimeerimistehnikaid, lihtsustab silumist ning muudab koodi loetavamaks ja kolmandate osapoolte arendajate jaoks hõlpsamini muudetavaks ja hooldatavaks. Tüübitugi on kavandatud valikulise funktsioonina: JavaScripti mootorid ja käituskeskkonnad, mis ei toeta tüübikontrolli, ignoreerivad tüübi annotatsioone ja töötlevad koodi nagu varem, käsitledes tüübiteavet kommentaaridena. Tüübikontrolli tööriistad saavad aga olemasolevat teavet kasutada vale tüübikasutusega seotud vigade tuvastamiseks.
Erinevalt JSDoc-annotatsioonide abil kommentaarides määratud tüübiteabest muudab tüüpide otsene määramine muutujate definitsioonides koodi visuaalsemaks, arusaadavamaks ja hõlpsamini redigeeritavaks. Näiteks suudavad integreeritud arenduskeskkonnad, millel on TypeScripti tugi, tipitud JavaScripti koodis vigu koheselt esile tõsta ilma täiendavate teisendusteta. Lisaks võimaldab sisseehitatud tüübitugi käivitada tipitud JavaScripti dialektides (nt TypeScript ja Flow) kirjutatud programme ilma ühest keelest teise tõlkimiseta.

Tehakse ettepanek lisada tüübid "string", "number" ja "boolean", mida saab kasutada muutujate, funktsiooniparameetrite, objektielementide, klassiväljade ja tüüpitud massiivide ("number[]) defineerimiseks. Samuti tehakse ettepanek toetada ühendtüüpe ("string | number") ja geneerilisi tüüpe. let x: string; function add(a: number, b: number) { return a + b; } interface Person { name: string; age: number; } function foo (x: T) { return x; } funktsioon foo(x: string | number): string | number { if (typeof x === number) { return x + 1 } muul juhul { return x + "!" } }
Allikas: opennet.ru
