Navrhuje se přidat do jazyka JavaScript syntaxi s informacemi o typu

Microsoft, Igalia a Bloomberg se chopily iniciativy začlenit syntaxi do specifikace JavaScriptu pro explicitní definice typů, podobnou syntaxi používané v jazyce TypeScript. V současné době jsou prototypové změny navržené pro zahrnutí do standardu ECMAScript předloženy k předběžným diskusím (fáze 0). Na příštím březnovém zasedání výboru TC39 je plánován přechod do první fáze projednávání návrhu se zapojením odborné komunity z ECMA.

Explicitně specifikované informace o typu vám umožní vyhnout se mnoha chybám během procesu vývoje, umožní použití dalších optimalizačních technik, zjednoduší ladění a učiní kód čitelnějším a snadnějším pro úpravy a podporu ze strany vývojářů třetích stran. Navrhuje se implementace podpory typu jako volitelná funkce – JavaScriptové enginy a runtime, které nepodporují kontrolu typu, budou ignorovat anotace s informacemi o typu a zpracují kód jako dříve, přičemž data typu budou považovat za komentáře. Nástroje pro kontrolu typů však budou moci použít dostupné informace k identifikaci chyb spojených s nesprávným použitím typů.

Navíc, na rozdíl od informací o typu specifikovaných pomocí anotací JSDoc specifikovaných ve formě komentářů, přímé uvedení typů přímo v konstrukcích definic proměnných učiní kód vizuálnějším, srozumitelnějším a snadněji upravitelným. Například IDE s podporou TypeScript budou moci okamžitě zvýraznit chyby v napsaném kódu JavaScript bez dalších konverzí. Vestavěná podpora typů navíc umožní spouštět programy napsané v psaných dialektech JavaScriptu, jako je TypeScript a Flow, bez překládání z jednoho jazyka do druhého.

Navrhuje se přidat do jazyka JavaScript syntaxi s informacemi o typu

Mezi typy se navrhuje přidat „string“, „number“ a „boolean“, které lze použít při definování proměnných, parametrů funkcí, prvků objektů, polí tříd, typovaných polí („číslo[]“). Navrhuje se také poskytovat podporu pro sloučené typy („řetězec | číslo“) a generika. nechť x: řetězec; funkce add(a: číslo, b: číslo) { return a + b; } rozhraní Osoba { jméno: řetězec; věk:číslo; } funkce foo (x: T) { return x; } funkce foo(x: řetězec | číslo): řetězec | číslo { if (typeof x === číslo) { return x + 1 } else { return x + "!" } }

Zdroj: opennet.ru

Přidat komentář