Le aziende Microsoft, Igalia e Bloomberg hanno lanciato un'iniziativa per l'inclusione di una sintassi nella specifica di JavaScript per la definizione esplicita dei tipi, simile alla sintassi utilizzata nel linguaggio TypeScript. Attualmente, il prototipo delle modifiche proposte per essere incluse nello standard ECMAScript è in fase di discussione preliminare (Stage 0). Nella prossima riunione di marzo del comitato TC39, si prevede di passare alla prima fase di revisione della proposta coinvolgendo la comunità di esperti di ECMA.
La presenza di informazioni sui tipi chiaramente definite permetterà di evitare molti errori durante lo sviluppo, darà l'opportunità di adottare tecniche di ottimizzazione aggiuntive, semplificherà il debug e renderà il codice più leggibile e facile da modificare e mantenere da parte di sviluppatori esterni. Il supporto per i tipi sarà implementato come un'opzione facoltativa: i motori JavaScript e i runtime che non supportano il controllo dei tipi ignoreranno le annotazioni con informazioni sui tipi e tratteranno il codice come prima, considerando i dati sui tipi come commenti. Tuttavia, gli strumenti per il controllo dei tipi saranno in grado di rilevare errori relativi all'uso scorretto dei tipi sulla base delle informazioni disponibili.
In questo modo, a differenza delle informazioni sui tipi fornite tramite annotazioni JSDoc, indicate sotto forma di commenti, la specifica diretta dei tipi all'interno delle definizioni delle variabili renderà il codice più chiaro, comprensibile e facile da modificare. Ad esempio, gli ambienti di sviluppo integrati che supportano TypeScript potranno evidenziare immediatamente gli errori nel codice JavaScript tipizzato senza ulteriori trasformazioni. Inoltre, il supporto incorporato per i tipi consentirà di eseguire programmi scritti in dialetti tipizzati di JavaScript, come TypeScript e Flow, senza la necessità di transpilarli da un linguaggio all'altro.

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