Companiile Microsoft, Igalia și Bloomberg au lansat o inițiativă de includere în specificația JavaScript a unei sintaxe pentru definirea explicită a tipurilor, similară cu sintaxa utilizată în limbajul TypeScript. În prezent, prototipul modificărilor, propus pentru a fi inclus în standardul ECMAScript, este deschis pentru discuții preliminare (Stadiul 0). La următoarea întâlnire din martie a comitetului TC39 se preconizează trecerea la prima etapă de revizuire a propunerii, implicând comunitatea de experți din ECMA.
Existența informațiilor explicit definite despre tipuri va evita multe erori în procesul de dezvoltare, va permite utilizarea unor tehnici suplimentare de optimizare, va simplifica depanarea și va face codul mai inteligibil și mai ușor de întreținut și modificat de către dezvoltatori terți. Suportul pentru tipuri se propune a fi implementat ca o opțiune facultativă - motoarele și runtime-urile JavaScript care nu suportă verificarea tipurilor vor ignora anotările cu informații despre tipuri, tratând codul ca înainte, considerând datele despre tipuri ca pe niște comentarii. Însă, instrumentele pentru verificarea tipurilor vor putea identifica erorile legate de utilizarea incorectă a tipurilor pe baza informațiilor disponibile.
În acest context, spre deosebire de informațiile despre tipuri, definite prin anotări JSDoc, care sunt indicate sub formă de comentarii, specificarea directă a tipurilor în structurile de definire a variabilelor va face codul mai vizibil, clar și ușor de editat. De exemplu, mediile de dezvoltare integrate care suportă TypeScript vor putea evidenția imediat erorile în codul JavaScript tipizat fără transformări suplimentare. În plus, suportul încorporat pentru tipuri va permite rularea programelor scrise în dialecte tipizate de JavaScript, precum TypeScript și Flow, fără a necesita transpilația dintr-un limbaj în altul.

Из типов предлагается добавить «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 + «!» } }
Sursa: opennet.ro
