Företagen Microsoft, Igalia och Bloomberg har initierat ett förslag att inkludera syntax för uttrycklig typdefinition i JavaScript-specifikationen, liknande den syntax som används i TypeScript. För närvarande har prototypen för ändringarna föreslagits för inkludering i ECMAScript-standarden och hålls för preliminära diskussioner (Stage 0). Vid det kommande mötet i TC39-kommittén i mars planeras det att gå vidare till den första granskningen av förslaget med medverkan av expertis från ECMA.
Tydlig typinformation kommer att förhindra många fel under utvecklingsprocessen, möjliggöra användning av ytterligare optimeringstekniker, förenkla felsökning och göra koden mer läsbar och enklare att underhålla och stödja av externa utvecklare. Typstöd föreslås implementeras som en valfri funktion — JavaScript-motorer och runtime som inte stödjer typkontroll kommer att ignorera typinformationens annotationer och behandla koden som tidigare, vilket innebär att typinformation kommer att behandlas som kommentarer. Men verktyg för typkontroll kommer att kunna identifiera fel relaterade till felaktig typanvändning baserat på den tillgängliga informationen.
I motsats till typinformation som anges genom JSDoc-annotationer i form av kommentarer, kommer direkt typangivelse i variabeldefinitioner att göra koden mer överskådlig, tydlig och enklare att redigera. Till exempel kommer integrerade utvecklingsmiljöer som stödjer TypeScript omedelbart att markera fel i typad JavaScript-kod utan ytterligare omvandlingar. Dessutom ger inbyggt typstöd möjlighet att köra program skrivna med typade JavaScript-dialekter som TypeScript och Flow utan transpilering mellan språken.

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