Nahoru
 

TypeScript, aneb JavaScript na dobrých drogách

Pokud znáte jazyk JavaScript, určitě jste si mohli všimnout, že není silně typovaný. To může znít jako jasná výhoda. Někdy je to však zdroj dobře skrytých chyb a nepřehledného kódu.

Pro silně typovaný JavaScript vznikla nadstavba TypeScript. Jedná se o kompilátor, který z jazyka TypeScript vytvoří ekvivalentně fungující jazyk JavaScript s tím, že TypeScript před kompilací kontroluje správně použité datové typy. Díky tomu, že nyní dokážeme definovat a kontrolovat datové typy, nám TypeScript poskytne mnoho užitečných a důležitých funkcí navíc.

Znázornění vztahu TypeScriptu a JavaScriptu
Obrázek č. 1: Znázornění vztahu TypeScriptu a JavaScriptu
//Proměnná určená na číslo
let myNumber: number = 20;
myNumber = "text"; //ERROR

/**
 * Funkce sčítající 2 čísla
 * @param number1 Číslo 1
 * @param number2 Číslo 2
 * @returns Číslo1 plus Číslo2
 */
function AddNumbers(number1: number, number2: number): number
{
    return number1 + number2;
}

myNumber = AddNumbers(1, 2); //3
var myText: string = AddNumbers(1, 2); //ERROR
    // -> AddNumbers vrací number, nikoliv string

TypeScript je úžasný pro programátory, jež jsou zvyklí na jazyky jako C# nebo Java, jelikož se jim podobá daleko více nežli JavaScript.

Kromě rozšířené funkčnosti můžeme v TypeScriptu používat syntax nového ECMAScriptu a kompilátor jej převede na starý dobrý JavaScript, který běží i na Internet Explorer.

TypeScript vytvořila firma Microsoft a první verze spatřila internet již 1. října 2012. Nejedná se tedy o žádnou neodladěnou novinku, nýbrž pořádný nástroj, který byl nativně zabudován do spousty systémů, jako například známé IDE Visual Studio.

Důležitá rozšíření

Největším přínosem TypeScriptu je rozhodně silné typování. Znamená to, že do proměnné na čísla nelze přiřadit slova a podobně. Může se to zdát jako zbytečnost, nicméně jedná se o důležitou vlastnost zamezující častým chybám.

V práci v týmu a na velkých projektech je silné typování opravdovým požehnáním.

Díky silnému typování TypeScript mohl přinést funkce jako:

  • Generiky
  • Rozhraní (interface)
  • Delegáty (interface pro funkce)
class Pole<T>
{
    mojePole: T[] = [];

    Vlozit(polozka: T)
    {
        this.mojePole.push(polozka);
    }
}

let mojeGenerPole: Pole<number> = new Pole<number>();
mojeGenerPole.Vlozit(10);
mojeGenerPole.Vlozit(20);
mojeGenerPole.Vlozit(30);
interface IDisposable
{
    Dispose(): void;
}

class Pole implements IDisposable
{
    
    mojePole: number[] = [];

    Vlozit(polozka: number)
    {
        this.mojePole.push(polozka);
    }

    Dispose()
    {
        this.mojePole = null;
    }
}

Krom toho nám TypeScript přináší spoustu syntaktického cukru, který násobně zvětšuje přehlednost a čitelnost pro novější programátory JavaScriptu/TypeScriptu a zároveň jej kompiluje do starých, vysoce podporovaných verzí JavaScriptu.

Kompilace

TypeScript respektuje všechny prvky JavaScriptu a pouze jej rozšiřuje. Je tedy možné psát kód, jehož zkompilovaná podoba bude identická.

//---------TYPESCRIPT---------
var number1 = 10;
console.log(number1);

//---------JAVASCRIPT---------
//(zkompilovaný z TypeScriptu)
var number1 = 10;
console.log(number1);

TypeScript vzhledem ke svým funkčnostem, jako například silné typování, nelze převést na JavaScript tak, aby si zachoval všechny své vlastnosti. Jinými slovy, všechny výhody TypeScriptu kompilací ztratíme. To je zřejmé, jelikož TypeScript implementuje nadstavby, které JavaScript nemá, tudíž je nelze uchovat. Může se tak někdy stát, že výsledný JavaScript je spustitelný, ale TypeScript kompilátor křičí kritické chyby.

//---------TYPESCRIPT---------
var number1: number = 10;
number1 = "text"; //ERROR
console.log(number1);

//---------JAVASCRIPT---------
//(zkompilovaný z TypeScriptu)
var number1 = 10;
number1 = "text"; //Funguje správně
    // -> JavaScript nerozlišuje typy
console.log(number1);

Konfigurace TypeScript kompilace je realizována pomocí prostého JSON souboru.

{
  "compileOnSave": true,

  "compilerOptions": {
    //"allowJs": true,
    "module": "commonjs",
    "noImplicitAny": true,
    "removeComments": false,
    "preserveConstEnums": true,
    "sourceMap": false,
    "noImplicitUseStrict": true,
    "moduleResolution": "node"
  },

  "exclude": [
    "node_modules"
  ]

}

Pokud se zajímáte o JavaScript, určitě není od věci se na TypeScript podívat a zhodnotit, zda by pro vás nebyl užitečný. Jestliže děláte krátké jednoduché scriptování (na které byl JavaScript navržen), pravděpodobně vám bude TypeScript přítěží. Pokud však tvoříte větší systémy nebo struktury modulů, TypeScript bude váš dobrý pomocník a pomůže vám zachytit spoustu chyb. Osobně si TypeScript nemohu vynachválit.

Pokud vás zajímá TypeScript, není nic lepšího nežli si přečíst oficiální dokumentaci TypeScriptu.

O JavaScriptu a jeho zajímavostech si můžete přečíst v našem článku „JavaScript, aneb jak postavit dům pomocí sirek“.