TypeScript

JavaScript er det altdominerende programmeringssprog til webbrowsere, og det anvendes oftere og oftere også på serversiden. JavaScript er et fleksibelt og effektivt værktøj der er sjovt og hurtigt at arbejde med - og det er også et sprog med nogle mindre attraktive sider der let kan lede en webudvikler i uføre (f.eks. den udbredte brug af globale variabler, forvirrende scope-regler og de mange forskellige måder true/false kan repræsenteres på).

Der har i tidens løb været mange forsøg på at gøre det lettere for webudviklere at undgå de værste faldgruber i JavaScript og skrive kode der er til at forstå og vedligeholde. Resultatet af dette arbejde har ofte været en form for trans-compiler eller transpiler der gør det muligt at oversætte kode skrevet i et andet sprog til JavaScript. CoffeeScript er et populært eksempel - udvikleren kan skrive kode i et sprog der er inspireret af Ruby, og denne kode kompileres så til JavaScript inden den uploades til en webserver.

Ideen bag CoffeeScript og de mange andre lignende projekter er at ulempen ved det ekstra kompilerings-trin i udviklingsprocessen mere end opvejes af fordelene ved at skrive kode i et sprog der bedre understøtter god praksis i udviklingsarbejdet.

TypeScript er et nyere eksempel på en sådan transpiler der gør det muligt at anvende statisk typing og klasse-baseret OOP i JavasScript. Man kan f.eks. knytte en bestemt type til et argument i en funktion:

// greeter.ts
function greeter(person: string) {
    return "Hello, " + person;
}

document.body.innerHTML = greeter("Jane");

Når TypeScript kompileres til JavaScript tjekkes argumenterne i kaldet af greeter. Ovenstående vil gå glat igennem:

$ tsc greeter.ts
$

Resultatet er en ren JavaScript-version af koden som er klar til at blive kørt i en browser:

// greeter.js
function greeter(person) {
    return "Hello, " + person;
}

document.body.innerHTML = greeter("Jane");

Dette vil til gengæld give en fejl:

// greeter.ts
function greeter(person: string) {
    return "Hello, " + person;
}
document.body.innerHTML = greeter([0,1,2]);

$ tsc greeter.ts
greeter.ts(6,39): error TS2345: Argument of type 'number[]' is not assignable to parameter of type 'string'.

I lighed med f.eks. CoffeeScript er TypeScript en overbygning på JavaScript, dvs. kode skrevet i "ren" JavaScript er også gyldig TypeScript-kode. TypeScript understøtter pt. ES5, og mange af de nye features i den nyeste JavaScript-standard, ES6, er også OK at bruge i TypeScript.

Udvikling af TypeScript er drevet af Microsoft (TypeScript er open source under Apache v2.0 licensen) og understøttes af nyere versioner af Microsofts Visual Studio IDE. Projektet er imidlertid interessant for andre end brugerne af Microsofts platforme og værktøjer, ikke mindst fordi Google har valgt at bruge TypeScript i Angular 2. Der er endnu ingen officiel releasedato for Angular 2, men projektet er p.t. i alpha og det er allerede nu muligt at eksperimentere med at skrive Angular komponenter i TypeScript.

Hvis du deltager i årets GOTO konference i København har du mulighed for at høre mere om TypeScript i Angular 2 mandag eftermiddag hvor Christian Holm Diget taler om brugen af TypeScript i FaceBooks Immutable og i Angular 2.

Den kommende 1.6 version af TypeScript kan i øvrigt også kompilere JSX til JavaScript, så udviklere der ønsker at bruge TypeScript sammen med f.eks. React får også snart denne mulighed.