Společnosti Microsoft, Igalia a Bloomberg zahájily iniciativu za zahrnutí syntaxe pro explicitní definici typů do specifikace JavaScriptu, podobné syntaxi používané v jazyce TypeScript. V současnosti je prototyp změn navržených k zařazení do standardu ECMAScript předložen k předběžným diskusím (Stage 0). Na nejbližším březnovém zasedání výboru TC39 se plánuje přejít na první fázi projednávání návrhu za účasti odborné komunity z ECMA.
Přítomnost explicitně zadaných informací o typech umožní vyhnout se mnoha chybám během vývoje, poskytne prostor pro využití dalších optimalizačních technik, zjednoduší ladění a učiní kód přehlednějším a jednodušším pro úpravy a podporu ze strany externích vývojářů. Podpora typů má být realizována jako volitelná funkce – JavaScriptové stroje a runtime, které nepodporují kontrolu typů, budou ignorovat anotace s informacemi o typech a zpracovávat kód jako dříve, vnímající údaje o typech jako komentáře. Nástroje pro kontrolu typů však budou schopny na základě dostupných informací odhalovat chyby spojené s nesprávným použitím typů.
Na rozdíl od informací o typech zadaných pomocí anotací JSDoc, které jsou uváděny jako komentáře, přímé uvedení typů přímo v konstrukcích pro definici proměnných učiní kód přehlednějším, srozumitelnějším a snadnějším pro úpravy. Například integrované vývojové prostředí podporující TypeScript bude moci okamžitě zvýraznit chyby v typizovaném JavaScriptovém kódu bez dalších transformací. Kromě toho zabudovaná podpora typů umožní spouštět programy napsané v typizovaných dialektech JavaScriptu, jako jsou TypeScript a Flow, bez transpilačního převodu z jednoho jazyka do druhého.

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