As empresas Microsoft, Igalia e Bloomberg apresentaram uma iniciativa para incluir na especificação do JavaScript uma sintaxe para definição explícita de tipos, semelhante à sintaxe usada na linguagem TypeScript. Atualmente, o protótipo das alterações proposto para inclusão no padrão ECMAScript está em discussão preliminar (Estágio 0). Na próxima reunião de março do comitê TC39, está previsto que o projeto avance para a primeira fase de consideração, envolvendo a comunidade de especialistas da ECMA.
A inclusão de informações de tipo explícitas permitirá evitar muitos erros durante o desenvolvimento, possibilitará a utilização de técnicas adicionais de otimização, facilitará a depuração e tornará o código mais legível e fácil de manter por desenvolvedores externos. O suporte a tipos é proposto como uma possibilidade opcional — motores JavaScript e runtimes que não suportem verificação de tipos irão ignorar anotações de informações de tipo e processar o código como antes, tratando os dados de tipo como comentários. No entanto, ferramentas de verificação de tipos poderão identificar erros relacionados ao uso incorreto de tipos com base nas informações disponíveis.
Diferentemente das informações de tipo fornecidas por anotações JSDoc, que são indicadas na forma de comentários, a definição direta de tipos nas construções de definição de variáveis tornará o código mais visual, compreensível e fácil de editar. Por exemplo, ambientes de desenvolvimento integrados com suporte ao TypeScript poderão destacar imediatamente os erros no código JavaScript tipado sem conversões adicionais. Além disso, o suporte integrado a tipos permitirá a execução de programas escritos em dialetos tipados do JavaScript, como TypeScript e Flow, sem a necessidade de transpilar de uma linguagem para outra.

Из типов предлагается добавить «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
