Le aziende Microsoft, Igalia e Bloomberg hanno proposto l'inserimento nella specifica JavaScript di una sintassi per la definizione esplicita dei tipi, simile a quella utilizzata nel linguaggio TypeScript. Attualmente, il prototipo delle modifiche proposte per l'inclusione nello standard ECMAScript è in fase di discussione preliminare (Stage 0). Durante la prossima riunione di marzo del comitato TC39, è previsto il passaggio alla prima fase di esame della proposta con il coinvolgimento della comunità di esperti di ECMA.
La presenza di informazioni chiaramente definite sui tipi eviterà molti errori nel processo di sviluppo, permetterà di utilizzare tecniche aggiuntive di ottimizzazione, semplificherà il debug e renderà il codice più leggibile e semplice da modificare e mantenere per gli sviluppatori esterni. Si propone di implementare il supporto per i tipi come un'opzione facoltativa: i motori JavaScript e i runtime che non supportano il controllo dei tipi ignoreranno le annotazioni relative ai tipi e tratteranno il codice come in precedenza, considerando le informazioni sui tipi come commenti. Tuttavia, gli strumenti di verifica dei tipi saranno in grado di identificare errori legati a un uso scorretto dei tipi sulla base delle informazioni disponibili.
A differenza delle informazioni sui tipi fornite tramite annotazioni JSDoc specificate nei commenti, l'indicazione diretta dei tipi all'interno delle strutture di definizione delle variabili rende il codice più chiaro, comprensibile e facile da modificare. Ad esempio, gli ambienti di sviluppo integrati che supportano TypeScript possono evidenziare immediatamente gli errori nel codice JavaScript tipizzato senza ulteriori trasformazioni. Inoltre, il supporto incorporato dei tipi consentirà di eseguire programmi scritti in dialetti tipizzati di JavaScript, come TypeScript e Flow, senza 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
