2012
TypeScript wordt publiek
Microsoft presenteert TypeScript op 1 oktober 2012. Het doel: JavaScript bruikbaarder maken voor grotere applicaties, met statische typecontrole en betere ontwikkeltools.
Ongeveer de helft van onze projecten gebruikt TypeScript. Sinds we in 2020 voor onze projecten overstapten van JavaScript naar TypeScript, is het onze voorkeurstaal voor uiteenlopende toepassingen. We gebruiken het voor de schermen die je ziet én de software die daarachter draait. Waarom we er zo graag mee werken? We krijgen snel feedback op onze code en kunnen veel bestaande bouwblokken gebruiken.
Circa 50% van onze projecten gebruikt TypeScript
Sinds 2020 onze voorkeur boven JavaScript
Eén taal voor frontend en backend

TypeScript bij 10KB
Een bestelportaal, een leeromgeving of een koppeling tussen systemen: TypeScript komt in ongeveer de helft van onze projecten terug. Sinds onze overstap in 2020 hebben we er veel ervaring mee opgebouwd.
Wat we er vooral aan hebben, merk je tijdens het ontwikkelen. Als we een gegevensstructuur aanpassen, wijst de typechecker aan welke code mee moet veranderen. En doordat frontend en backend dezelfde taal spreken, kunnen we die afspraken aan beide kanten gebruiken. Hieronder lees je waarom dat voor ons zo prettig werkt.

Waarom wij TypeScript gebruiken
Het uitgebreide typesysteem vindt veel fouten al tijdens het ontwikkelen en de compile-timecontrole. Zeker als we met AI programmeren is dat nuttig: code laten maken, controleren en bijsturen volgen elkaar snel op. Een verkeerd veld of een ontbrekende afhandeling valt direct op. Tests en een inhoudelijke review blijven nodig, maar we hoeven niet voor iedere typefout de applicatie te starten.
TypeScript compileert naar JavaScript. Dat draait in de browser én op de server met Node.js. Daardoor kunnen we de frontend en backend in dezelfde taal schrijven en types delen. Die combinatie is buiten talen die naar JavaScript of WebAssembly compileren vrij bijzonder. Het scheelt schakelen en maakt afspraken tussen onderdelen makkelijker te bewaken.
Het webecosysteem is enorm. Voor formulieren, grafieken, authenticatie en koppelingen zijn vaak goede libraries beschikbaar. We hoeven zulke onderdelen niet telkens zelf te bouwen. Daardoor kunnen we meer aandacht besteden aan de logica die jouw applicatie bijzonder maakt. Welke afhankelijkheden we toevoegen, blijft wel een bewuste keuze.
Het uitgebreide typesysteem vindt veel fouten al tijdens het ontwikkelen en de compile-timecontrole. Zeker als we met AI programmeren is dat nuttig: code laten maken, controleren en bijsturen volgen elkaar snel op. Een verkeerd veld of een ontbrekende afhandeling valt direct op. Tests en een inhoudelijke review blijven nodig, maar we hoeven niet voor iedere typefout de applicatie te starten.
Onze afweging
Ook Ruby en Python krijgen steeds betere ondersteuning voor types. In ons werk vinden we de samenhang tussen taal, editor en libraries bij TypeScript nog sterker. Dat is een belangrijke reden voor onze voorkeur.
Er zit ook een keerzijde aan. Het ecosysteem beweegt zo snel dat een codebase van een jaar oud volgens de nieuwste mode alweer hopeloos verouderd kan lijken. En we begrijpen developers die vinden dat TypeScript en JavaScript-frameworks onnodige complexiteit toevoegen. Configuratie, buildstappen en ingewikkelde types kunnen een eenvoudige applicatie onnodig lastig maken.
We kiezen dus niet bij iedere opdracht automatisch voor TypeScript. Soms past een andere taal beter bij de uitdaging, het bestaande systeem of het team dat ermee verder moet. En goed werkende software hoeft niet opnieuw gebouwd te worden omdat er een nieuw framework is.
Welke taal past bij jouw applicatie?
In ons werk
Bij Zetprofiel gebruiken we TypeScript voor een bestelportaal dat maatwerkprofielen tekent en doorrekent. Voor Stichting Techniek Bedrijven gebruiken we het in een platform dat studenten en bedrijven koppelt. Verschillende opdrachten, met dezelfde behoefte aan duidelijke afspraken over gegevens.
Bij Brainstud werkten we met React en TypeScript aan een bestaande leeromgeving. En ook de website die je nu bekijkt, schrijven we in TypeScript.
Bekijk onze cases
De taal uitgelegd
TypeScript is een opensourceprogrammeertaal van Microsoft die JavaScript uitbreidt met types. Zo kun je vastleggen dat een prijs een getal is, een naam tekst en een bestelling maar een paar geldige statussen heeft. De typechecker controleert of de code zich aan die afspraken houdt. Vaak zie je een foutmelding al in je editor.
De types verdwijnen bij de omzetting naar JavaScript. Ze controleren dus niet vanzelf de gegevens die een gebruiker invult of een externe API terugstuurt. Die invoer moeten we apart valideren. Ook een verkeerde berekening kan prima door de typecheck komen. TypeScript helpt ons om fouten te vinden; het bewijst niet dat de hele applicatie klopt.
Een fout die een klant kan merken
Een bestelling kost €20, met €5 verzendkosten. Maar een invoerveld geeft die verzendkosten door als tekst: "5". Bij een getal plus tekst telt JavaScript niet op, maar plakt het de waarden aan elkaar. Het resultaat is "205".
Als de betaalcode dat als een bedrag in euro’s verwerkt, vraagt de applicatie €205 in plaats van €25. De code draait gewoon door. In dit voorbeeld gebruiken we hele euro’s om de fout makkelijk te kunnen volgen.
// JavaScript: een bedrag dat ongemerkt verandert
const prijs = 20;
const invoerVerzendkosten = "5";
// Een getal + tekst wordt aan elkaar geplakt.
const foutTotaal = prijs + invoerVerzendkosten;
console.log(foutTotaal);
// "205", terwijl de klant 25 euro verwacht.
// Stel dat de betaalcode dit als eurobedrag leest:
const foutBetaalverzoek = {
bedrag: foutTotaal,
valuta: "EUR",
};
console.log(foutBetaalverzoek.bedrag);
// Nog steeds "205". JavaScript geeft geen fout.Een functie met duidelijke afspraken
Een functie is een klein recept: je geeft de prijs en verzendkosten mee en krijgt het totaal terug. Met number spreken we af dat beide ingrediënten getallen moeten zijn. Ook de uitkomst moet een getal zijn.
Geven we de tekst "5" mee, dan meldt TypeScript al bij het controleren van de code dat dit niet past. De foute aanroep staat daarom als commentaar in het voorbeeld. Alleen een JavaScript-bestand omzetten naar TypeScript lost de fout niet op; deze typeafspraken maken het verschil.
// TypeScript: afspraken voor de berekening
function berekenTotaal(
prijs: number,
verzendkosten: number,
): number {
const totaal = prijs + verzendkosten;
return totaal;
}
const bedragAlsTekst = "5";
// Deze aanroep zou TypeScript afkeuren:
// berekenTotaal(20, bedragAlsTekst);
// Tekst (string) past niet waar een getal hoort.
// Met twee getallen klopt de optelling wel.
const voorbeeldTotaal = berekenTotaal(20, 5);
console.log(voorbeeldTotaal);
// 25Van formulier naar berekening
De oplossing is om de tekst uit het invoerveld eerst om te zetten naar een getal. Dat doet Number. We controleren ook of de invoer leeg, ongeldig of negatief is. Daarna kan de berekening verder: €20 plus €5 wordt €25.
TypeScript helpt ons dus om de verkeerde aansluiting tussen invoer en berekening te vinden. De controle op wat een gebruiker invult, blijft nodig wanneer de applicatie draait. Die twee controles vullen elkaar aan.
// Invoer omzetten en controleren
function leesVerzendkosten(invoer: string): number {
const bedrag = Number(invoer);
if (
invoer.trim() === "" ||
!Number.isFinite(bedrag) ||
bedrag < 0
) {
throw new Error("Vul geldige verzendkosten in.");
}
return bedrag;
}
const verzendkosten = leesVerzendkosten("5");
const juistTotaal = berekenTotaal(20, verzendkosten);
const juistBetaalverzoek = {
bedrag: juistTotaal,
valuta: "EUR",
};
console.log(juistBetaalverzoek.bedrag);
// 25: het bedrag dat we verwachten.
// Met bijvoorbeeld "gratis" stopt de invoercontrole:
// leesVerzendkosten("gratis");
// Zo rekenen we niet verder met een ongeldig bedrag.// JavaScript: een bedrag dat ongemerkt verandert
const prijs = 20;
const invoerVerzendkosten = "5";
// Een getal + tekst wordt aan elkaar geplakt.
const foutTotaal = prijs + invoerVerzendkosten;
console.log(foutTotaal);
// "205", terwijl de klant 25 euro verwacht.
// Stel dat de betaalcode dit als eurobedrag leest:
const foutBetaalverzoek = {
bedrag: foutTotaal,
valuta: "EUR",
};
console.log(foutBetaalverzoek.bedrag);
// Nog steeds "205". JavaScript geeft geen fout.
// TypeScript: afspraken voor de berekening
function berekenTotaal(
prijs: number,
verzendkosten: number,
): number {
const totaal = prijs + verzendkosten;
return totaal;
}
const bedragAlsTekst = "5";
// Deze aanroep zou TypeScript afkeuren:
// berekenTotaal(20, bedragAlsTekst);
// Tekst (string) past niet waar een getal hoort.
// Met twee getallen klopt de optelling wel.
const voorbeeldTotaal = berekenTotaal(20, 5);
console.log(voorbeeldTotaal);
// 25
// Invoer omzetten en controleren
function leesVerzendkosten(invoer: string): number {
const bedrag = Number(invoer);
if (
invoer.trim() === "" ||
!Number.isFinite(bedrag) ||
bedrag < 0
) {
throw new Error("Vul geldige verzendkosten in.");
}
return bedrag;
}
const verzendkosten = leesVerzendkosten("5");
const juistTotaal = berekenTotaal(20, verzendkosten);
const juistBetaalverzoek = {
bedrag: juistTotaal,
valuta: "EUR",
};
console.log(juistBetaalverzoek.bedrag);
// 25: het bedrag dat we verwachten.
// Met bijvoorbeeld "gratis" stopt de invoercontrole:
// leesVerzendkosten("gratis");
// Zo rekenen we niet verder met een ongeldig bedrag.Een paar mijlpalen
Van de eerste publieke versie tot onze overstap: zo kreeg TypeScript een vaste plek in ons werk.
2012
Microsoft presenteert TypeScript op 1 oktober 2012. Het doel: JavaScript bruikbaarder maken voor grotere applicaties, met statische typecontrole en betere ontwikkeltools.
2014
TypeScript 1.0 verschijnt. Developers kunnen de taal gebruiken voor hun productieapplicaties en voortbouwen op bestaande JavaScript-code.
2016
TypeScript 2.0 introduceert strict null checks. Teams kunnen laten controleren of ze null en undefined afhandelen voordat ze een waarde gebruiken.
2020
10KB stapt voor haar projecten over van JavaScript naar TypeScript. De snelle feedback van het typesysteem en het gedeelde webecosysteem maken het onze voorkeurstaal voor uiteenlopende toepassingen.
2022
TypeScript 4.9 voegt met satisfies een extra manier toe om gegevens aan de afgesproken structuur te toetsen. De taal blijft zich ontwikkelen, met steeds meer hulp om fouten tijdens het programmeren te vinden.
TypeScript bij andere bedrijven
Slack beschreef in 2017 hoe het team de desktopapp stap voor stap omzette van JavaScript naar TypeScript. Nieuwe functies en bugfixes konden ondertussen doorgaan. Een overstap hoeft dus niet altijd een complete herschrijving te betekenen.
Voor ons is dat een herkenbare afweging bij bestaande software: hoe verbeter je de basis terwijl gebruikers gewoon verder moeten kunnen werken?

TypeScript bij andere bedrijven
Airbnb publiceerde in 2020 ts-migrate, gereedschap om grote hoeveelheden JavaScript naar TypeScript om te zetten. In het bijbehorende artikel beschreef het team hoe TypeScript de standaard werd voor zijn webfrontend.
Die automatisering was een begin: de gegenereerde code bevatte nog uitzonderingen die developers later moesten aanscherpen. Een bestand dat door de compiler komt, benut dus nog niet automatisch alle voordelen van het typesysteem.

TypeScript bij andere bedrijven
Figma beschreef in 2024 de overstap van zijn eigen taal Skew naar TypeScript voor code in de prototypeviewer. De eigen taal maakte samenwerken en aansluiten op andere code steeds moeilijker.
De overstap gaf het team toegang tot bestaande tools en libraries en maakte instappen voor developers eenvoudiger. Dat is precies waarom we bij een taalkeuze verder kijken dan alleen de syntax.




Van maatwerkportaal tot bestaande applicatie: in onze cases lees je welke keuzes we maakten en waarom.
Ewout

TypeScript is vaak ons vertrekpunt. Of het ook voor jouw applicatie de beste keuze is, hangt af van wat je wilt bouwen, wat er al staat en wie ermee gaat werken. Bespreek het met Ewout, dan denken we mee over een passende taal en aanpak.
CONTACT
Heb je een vraag of wil je sparren over je software? Laat je gegevens achter, dan nemen we snel contact met je op.