Dajbych.net


K čemu je dobrý TypeScript

, 7 minut čtení

Ty­pe­Script je nad­stavba ja­zyka JavaScript. Kon­cem roku se uvede verze 1.0, která bude in­te­gro­vána do Vi­sual Stu­dia 2013. Zatímco Ja­vaScript byl na­vr­žen pro apli­kace ob­sahující stovky řádků kódu, Ty­pe­Script je na­vr­žen pro apli­kace ob­sahující stovky tisíc řádků kódu. Nabízí ty­po­vou kon­t­rolu, třídy, mo­duly roz­hraní, In­tel­li­Sense, mož­nost pře­jme­no­vá­vání me­tod, pří­kazy Go To De­fi­ni­ton a Find All Refe­ren­ces. Jeho syn­taxe je na­vr­žena tak, aby byla co nej­více shodná se syn­taxí EC­MAScript 6.

Proč JavaScript nemá typovou kontrolu?

Ty­pe­Script tedy nabízí sta­tic­kou ty­po­vou kon­t­rolu. Proč se učit Ty­pe­Script a ne­po­čkat, až bude ně­kdy v bu­doucnu v Ja­vaScriptu? Pro­tože uve­dení typů bylo sou­částí spe­ci­fi­kace EC­MASCript 4, ale ve výsledku od toho každý dá­val ruce pryč, až vznikla od­leh­čená spe­ci­fi­kace EC­MAScript 6, která typy ne­ob­sahuje. V sou­časné době je ty­pová kon­t­rola pro Ja­vaScript v ne­do­hlednu.

Ja­vascrip­tové bě­hové prostředí Cha­kra, které je v In­ter­net Ex­plo­reru, si vy­tváří pro zvý­šení vý­konu da­tové typy dy­na­micky při vy­ko­ná­vání kódu. Zpo­vzdálí je výsle­dek po­ně­kud zvláštní. Ty­pový ja­zyk, který je ne­zbytný pro velké množ­ství kódu, se pře­loží do ja­zyka bez ty­pové kon­t­roly, ve kte­rém se typy zase slo­žitě do­hle­dá­vají, pro­tože bez toho na sou­čas­ných pro­ce­so­rech není možné do­sáh­nout vy­so­kého vý­konu.

Sta­tické da­tové typy jsou ne­zbyt­ností pro roz­voj ná­strojů pro vý­vo­jáře, které pak mo­hou nabíd­nout pod­poru re­fac­to­ringu kódu, hle­dání re­fe­rencí a sa­mo­zřejmě In­tel­li­Sence.

Po­kud vo­láme na­pří­klad REST služby, které nám vra­cejí data ve for­mátu JSON, ne­známe je­jich schéma. Nej­snad­nější způ­sob je­jich par­so­vání nabízí dy­na­mický jazyk, který ma­puje me­tody ja­zyka na data (me­toda JSON.parse). Pro tento scé­nář dává čistě dy­na­mický ja­zyk smysl. Když však s tě­mito daty pracujeme, mu­síme mít je­jich struk­turu v hlavě. Snadno se pak dě­lají chyby. Ty­pe­Script nabízí roz­hraní, které po­pi­suje, jaké má ob­jekt vlastnosti a ja­kého jsou typu, čímž na­hra­zuje schéma. To umož­ňuje po­u­ží­vat In­tel­li­Sense pro vlastní data.

Dal­ším pří­kla­dem je práce s DOM, je­hož struk­tura je do­předu známá. Díky tomu je možné vyu­žít In­tel­li­Sense, který urych­luje práci. Sou­bor, který po­pi­suje da­tové typy DOM a z ně­hož Vi­sual Stu­dio čerpá in­for­mace pro In­tell­Sense do Ty­pe­Scriptu, má přes 8 000 řá­dek. Všechny si je už ni­kdo ne­může za­pa­ma­to­vat. Ty­pe­Script však ano.

Kde se TypeScript nejvíce používá?

Pi­lotní apli­kace pro tes­to­vání ja­zyka Ty­pe­Script je apli­kace Xbox Mu­sic, která běží na Win­dows 8 a Xbox One. Ob­sahuje přes půl mi­li­onu řádků ty­pe­scrip­tového kódu. Ty­pe­Script také po­u­ží­vají pro­duk­tové týmy Bing Maps, Of­fice 365 a Of­fice Web Apps. Mezi dal­šími uži­va­teli Ty­pe­Scriptu je spo­leč­nost Adobe.

Čím se TypeScript liší od podobných jazyků?

Exis­tují po­dobné ja­zyky, které při­ná­šejí ob­dobné výhody. Patří mezi ně na­pří­klad Coffee­Script, Script# a Dart. Zatímco Ty­pe­Script je roz­šíření Ja­vaScriptu, Coffee­Script je od­lišný ja­zyk a není ty­pový. Ne­mů­žete na­pří­klad vzít své ja­vascrip­tové sou­bory, pře­jme­no­vat je na Coffee­Script a roz­ši­řo­vat je. Dart nabízí od­lišné prostředí než Ja­vaScript, ale za cenu toho, že se v Ja­vaScriptu musí uměle vy­tvá­řet. To výrazně sni­žuje vý­kon. Script# je na tom po­dobně. Ty­pe­Script in­jek­tuje váš kód, jedině když po­u­ži­jete dě­dič­nost. I tak se ale jedná jen o 6 řádků kódu. Ty­pe­Script je je­diný ja­zyk, který je roz­šíře­ním Ja­vaScriptu a nabízí sta­tické typy.

Přísně ty­pový ja­zyk C# má také dy­na­mický da­tový typ. Umož­ňuje to, co dy­na­mické ja­zyky, jako na­pří­klad JavaScript, jen s tím roz­dílem, že hlídá ty­po­vost až za běhu. Ja­vaScript má vlastní systém a Ty­pe­Script se ho ne­snaží ni­jak mě­nit. Pouze zá­měrně pro­gramá­tora více sva­zuje a za­jiš­ťuje mu tím větší pod­poru, takže ne­u­dělá chybu tak snadno. Veš­kerá ty­po­vost se v době pře­kladu ztrácí. Proto ne­s­ni­žuje vý­kon.

IntelliSense i pro JavaScript

Pod­pora In­tel­li­Sense pro WinJS by se měla po­va­žo­vat za sa­mo­zřej­most. Je WinJS Ty­pe­Script? Ano, pro­tože Ja­vaScript je pod­mno­ži­nou Ty­pe­Scriptu. Otázka zní, jestli je WinJS na­psaná v Ty­pe­Scriptu, aby pod­po­ro­vala ty­po­vou kon­t­rolu. Je to však jedno, pro­tože ty­pová kon­t­rola může být po­skyt­nuta i pro ja­vascrip­tový kód. Je k tomu však po­třebný sou­bor s de­kla­ra­cemi. V sou­časné době jsou sou­bory s de­kla­ra­cemi k dis­po­zici pro vět­šinu ja­vascrip­to­vých kniho­ven. Na­jdete je na stránce De­fi­ni­te­lyTy­ped.

In­tel­li­Sense vy­ža­duje ty­pový ja­zyk. Tento pří­klad ilustruje, jak da­tové typy pro­té­kají kó­dem.

var a = ["hello", "world"]; var n = a.map(s => s.length); /* proměnná a je typu array<string> proměnná s je typu string a Visual Studio může nebídnout IntelliSence proměnná n je typu array<number> */

Co když nemám Visual Studio?

Ty­pe­Script je open source a pod­po­rují ho i vý­vo­jová prostředí pro Mac OS X nebo Li­nux. Mimo Vi­sual Stu­dia ho pod­po­ruje i Jet­Bra­ins Web­S­torm a Ph­pS­torm.

Asynchronní kód v budoucnu

Proč Ty­pe­Script ještě nemá async & await po vzoru ja­zyků F# a C#? Sice už exis­tuje fork Ty­pe­Scriptu, který toto po­ho­dlné asyn­chronní pro­gra­mo­vání pod­po­ruje, ale An­ders Hejl­sberg se roz­hodl po­čkat až na EC­MAScript 6. Ten bude pod­porovat ite­rá­tory, které do­vo­lují zkom­pi­lo­vat asyn­chronní Ty­pe­Script kód do Ja­vaScriptu mno­hem efek­tiv­něji. Bez ite­rá­torů by byl kód pří­liš od­lišný od zdro­jo­vého a im­ple­men­to­vat pod­poru pro la­dění do Vi­sual Stu­dia by bylo ve­lice ob­tížné.

Shrnutí

Co tedy Ty­pe­Script nabízí?

Co může IDE díky Ty­pe­Scriptu nabíd­nout?

Příklady

Ob­vykle se sna­žím uvá­dět pří­klady kódu, ale v tomto pří­padě jsem se roz­hodl od­ká­zat na web ty­pe­scriptlang.org, kde jsou všechny před­nosti ja­zyka Ty­pe­Script vy­svět­leny stručně a ná­zorně.