TypeScript
Waarom en wanneer TypeScript te gebruiken
Zoeken…
Invoering
Als u de argumenten voor typen systemen in het algemeen overtuigend vindt, zult u blij zijn met TypeScript.
Het brengt veel van de voordelen van het type systeem (veiligheid, leesbaarheid, verbeterde tooling) naar het JavaScript-ecosysteem. Het heeft ook een aantal nadelen van type systemen (extra complexiteit en onvolledigheid).
Opmerkingen
De verdiensten van getypte versus niet-getypeerde talen worden al tientallen jaren besproken. Argumenten voor statische typen zijn onder meer:
- Veiligheid: met type-systemen kunnen veel fouten vroegtijdig worden opgemerkt, zonder de code uit te voeren. TypeScript kan worden geconfigureerd om minder programmeerfouten toe te staan
- Leesbaarheid: expliciete typen maken code gemakkelijker te begrijpen voor mensen. Zoals Fred Brooks schreef : "Laat me je stroomdiagrammen zien en je tafels verbergen, en ik zal door mystificatie blijven. Laat me je tafels zien, en meestal heb ik je stroomdiagrammen niet nodig; ze zullen duidelijk zijn."
- Tooling: type systemen maken code eenvoudiger voor computers om te begrijpen. Hierdoor kunnen tools zoals IDE's en linters krachtiger zijn.
- Prestaties: type systemen zorgen ervoor dat code sneller wordt uitgevoerd door de noodzaak voor runtime type controle te verminderen.
Omdat de uitvoer van TypeScript onafhankelijk is van de typen , heeft TypeScript geen invloed op de prestaties. Het argument voor het gebruik van TypeScript berust op de andere drie voordelen.
Argumenten tegen type systemen zijn onder meer:
- Toegevoegde complexiteit: type systemen kunnen complexer zijn dan de taallooptijd die ze beschrijven. Functies van hogere orde kunnen eenvoudig correct te implementeren zijn, maar moeilijk te typen . Omgaan met typedefinities creëert extra barrières voor het gebruik van externe bibliotheken.
- Meer uitgebreidheid: annotaties van typen kunnen boilerplate toevoegen aan uw code, waardoor de onderliggende logica moeilijker te volgen is.
- Langzamere iteratie: door een bouwstap te introduceren, vertraagt TypeScript de cyclus van bewerken / opslaan / opnieuw laden.
- Onvolledigheid: een type systeem kan niet zowel degelijk als volledig zijn. Er zijn juiste programma's die TypeScript niet toestaat. En programma's die TypeScript accepteert, kunnen nog steeds bugs bevatten. Een type systeem verlicht de noodzaak van testen niet. Als u TypeScript gebruikt, moet u mogelijk langer wachten om nieuwe ECMAScript-taalfuncties te gebruiken.
TypeScript biedt enkele manieren om al deze problemen aan te pakken:
- Complexiteit toegevoegd. Als typering van een programma te moeilijk kan schrijfmachine grotendeels worden uitgeschakeld met een ondoorzichtige
any
type. Hetzelfde geldt voor externe modules. - Uitgebreidheid toegevoegd. Dit kan gedeeltelijk worden aangepakt via type-aliassen en het vermogen van TypeScript om typen af te leiden. Het schrijven van duidelijke code is net zo goed een kunst als een wetenschap: verwijder te veel typeaantekeningen en de code is misschien niet langer duidelijk voor menselijke lezers.
- Langzamere iteratie: een buildstap is relatief gebruikelijk in de moderne JS-ontwikkeling en TypeScript is al geïntegreerd met de meeste buildtools. En als TypeScript vroegtijdig een fout ontdekt, kan het u een volledige iteratiecyclus besparen!
- Onvolledigheid. Hoewel dit probleem niet volledig kan worden opgelost, heeft TypeScript in de loop van de tijd steeds meer expressieve JavaScript-patronen kunnen vastleggen. Recente voorbeelden zijn de toevoeging van toegewezen typen in TypeScript 2.1 en mixins in 2.2 .
De argumenten voor en tegen typesystemen zijn in het algemeen even goed van toepassing op TypeScript. Het gebruik van TypeScript verhoogt de overhead bij het starten van een nieuw project. Maar na verloop van tijd, naarmate het project groter wordt en meer bijdragers wordt, is de hoop dat de voordelen van het gebruik ervan (veiligheid, leesbaarheid, tooling) sterker worden en zwaarder wegen dan de nadelen. Dit wordt weerspiegeld in het motto van TypeScript: "JavaScript that scales."
Veiligheid
TypeScript vangt typefouten vroegtijdig op via statische analyse:
function double(x: number): number {
return 2 * x;
}
double('2');
// ~~~ Argument of type '"2"' is not assignable to parameter of type 'number'.
Leesbaarheid
Met TypeScript kunnen editors contextuele documentatie leveren:
Je zult nooit vergeten of String.prototype.slice
neemt (start, stop)
of (start, length)
!
tooling
Met TypeScript kunnen editors geautomatiseerde refactors uitvoeren die op de hoogte zijn van de regels van de talen.
Hier is Visual Studio Code bijvoorbeeld in staat om verwijzingen naar de innerlijke foo
te hernoemen zonder de uiterlijke foo
te wijzigen. Dit zou moeilijk te doen zijn met een eenvoudige zoekopdracht / vervanging.