Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Door , , 51 reacties

Microsoft heeft de final release van TypeScript 2.0 vrijgegeven. De javascript-superset is uitgebreid met functionaliteit die de productiviteit van ontwikkelaars verder moet verbeteren volgens Microsoft.

TypeScript 2.0 is te downloaden voor Visual Studio 2015 Update 3, binnen te halen via NuGet, te gebruiken in Visual Studio Code of te installeren met npm, meldt Microsoft. Versie 2.0 maakt het onder andere makkelijker declaration files, of .d.ts-bestanden te gebruiken. Daarnaast hebben null en undefined nu hun eigen types en is de control flow uitgebreid. "Als iets een number of null is, kun je dat nu aangeven met de union type number | null", legt Microsoft uit.

Volgens Microsoft zijn er inmiddels 2 miljoen npm-downloads per maand voor de javascript-superset geweest, tegenover 275.000 een jaar geleden. Onder andere Google gebruikt het voor zijn Angular 2-framework.

Microsoft kondigde TypeScript in 2012 aan. De uitgebreide variant van javascript bevat onder andere ondersteuning toe voor optionele datatypen, klassen en modules. Microsoft typeert TypeScript als 'javascript die schaalt': met name het ontwikkelen van grote web-apps zou makkelijker zijn.

TypeScript 2.0

Moderatie-faq Wijzig weergave

Reacties (51)

Typescript is top maar vind het spijtig dat async await er nog niet in zit (zoala ze beloofden). Is nog enkele maanden wachten
Dit. Heel jammer om nog steeds vrij complexe structuren te moeten gebruiken terwijl het zoveel simpeler kan.
Async await zit er overigens wel in wanneer je compileert naar es6 (bv wanneer je het alleen icm node6 gebruikt)
ja maar aangezien ik van .NET kom, blijf ik toch op de server .NET gebruiken..
Net optijd voor angular 2 :*)
Net te laat eigenlijk ;-) een week om precies te zijn.
Moet eerlijk zeggen dat ik het plaatje nogal verwarrend vind icm bovenstaande tekst. In de tekst staat dat Microsoft zegt zo'n 2 miljoen npm downloads in totaal(?) gehad te hebben, maar in het plaatje 2+ miljoen per maand.
Het plaatje klopt, het (slecht vertaalde) nieuwsbericht is verwarrend;

Origineel artikel.

Er zijn +/- 2.000.000 npm-downloads per maand - een jaar geleden waren dat er +/- 275.000 per maand (downloads gaan overigens vaak ook automatisch, gewrapped in een IDE - niet iedereen weet dat hij het download...).
  • Last month alone, TypeScript had over 2 million npm downloads compared to just 275K in the same month last year.
  • In addition, we’ve had tremendous adoption of the TypeScript nightly builds with over 2000 users participating in discussion on GitHub...
  • ...and 1500 users logging issues.
  • We’ve also accepted PRs from over 150 users [...]
Vetgedrukt hierboven, is wat in de infographic staat afgebeeld. Overigens wordt Typescript ook veel gebruikt voor Cordova ("Phonegap") - zodat je platform agnostisch apps kan bouwen.

-------------------------------------------------------------------------------------

- edit - Die non-nullable types (.mp4) zijn een minor improvement, er is veel meer (met meer code-impact) geupdate;

https://github.com/Micros...hat%27s-new-in-TypeScript

...maar ik begrijp dat dat wat ver gaat, voor een site als Tweakers.

[Reactie gewijzigd door deathgrunt op 22 september 2016 22:46]

Ik heb al redelijk wat gedaan met typescript icm angular 2 in het ionic framework en het werkt echt heel prettig als je het begint te begrijpen.
Redelijk off topic; maar waarom Ionic en niet NativeScript (https://www.nativescript.org/)? ;-) Overigens.. hoera! Angular2 is nu ook officiŽel in productie, dus dit wordt een druk weekendje feature hunten :D
Kan je NativeScript ook in Phonegap gebruiken? Ik gebruikte ook Ionic in combinatie met Phonegap dat allemaal lekker draait binnen een Visual Studio omgeving.
De bedoeling van Nativescript is net dat je geen phonegap meer nodig hebt. Je maakt echt native apps.

[Reactie gewijzigd door ktorfs op 23 september 2016 00:32]

Omdat ik al erg lang bezig ben met ionic en angular en dat er prettig vind werken. Heb nog geen reden gezien om serieus moeite te steken in nativescript.
Ionic heeft veel voordelen meer zoals os specifieke layouts en styling. Ook omdat het cordova based is zijn veel plugins beschikbaar.

Angular 2 is vorige week vrijdag uitgekomen hiervoor had je al ts2.0 nodig vandaar mogelijk het hoog aantal downloads. Ik heb het idee dat de ontwikkeling van angular2 wat druk op het Typescript development process heeft gelegd. Ik vind helemaal mooi.
Goed dat de reference-bestanden onder handen zijn genomen. Het was altijd irritant deze apart bij te voegen, vooral bij het scaffolden van een project. Als ik het goed begrijp kunnen deze bestanden voortaan worden opgehaald via NPM, mits DefinitelyTyped ze aanbiedt (wat bij de meeste grote projecten, zoals jQuery, zo is). Voorbeeld: npm install -s @types/lodash.

Meer hier: https://blogs.msdn.micros...nnouncing-typescript-2-0/
Je kan ook overschakelen op typings. Heb hier niet direct de url bij me maar het is zowat de opvolger van DT. Al gebruiken ze ook de definities van DT.

Edit: de npm feature lijkt echt nog interessanter te zijn dan zowel DT als typings.

[Reactie gewijzigd door ktorfs op 23 september 2016 00:33]

Beter om te zeggen dat typings de opvolger is van tsd. De definition files van DT zijn ook gewoon beschikbaar via typings.

Voor de nieuwe npm tool hebben ze trouwens nauw samengewerkt met de maintainer van typings: https://blogs.msdn.micros...ure-of-declaration-files/

[Reactie gewijzigd door StijnH op 23 september 2016 10:30]

JavaScript is object-oriented maar niet class-based object-oriented, dit is een van de redenen dat TypeScript bestaat. In mijn mening zijn er steeds meer developers die van een andere achtergrond met een traditioneel OOP model komen die voor het eerst echt iets met JavaScript aan het bouwen zijn. Die zullen het 'gemak' missen van een taal zoals Java en daarom liever in TypeScript werken.

Zelf ben ik als frontend developer die al een tijdje bezig is redelijk bezorgd aan het worden over de ontwikkelingen in zowel TypeScript als wat TC-39 allemaal aan het bekokstoven is. Er lijkt een shift te zijn naar het implementeren van functionaliteiten in 'classes' die veel meer dan syntactic sugar zijn. Denk hier bijvoorbeeld aan decorators die alleen in classes werken en niet op normale functies.

Het idee van static types in JavaScript spreekt me dan wel weer erg aan, het zou een behoorlijke hoeveelheid handmatige checks kunnen verhelpen. Maar als ik dat zou willen dan gebruik ik toch liever Flow (https://github.com/facebook/flow) dan TypeScript, omdat het met een stuk minder baggage met zich meebrengt.
Voor wie het eens wilt proberen: TypeScript Playground.
Er zitten ook een aantal voorbeelden bij, waaronder een raytracer.
Twee regels of 20 regels, dat maakt nogal verschil, heb mijn javascript versie gemaakt van een simpel voorbeeld van Microsoft, een soort hello world, mijn versie was twee regelsen niet twintig. Vind het wel een nadeel zoveel ruis om iets eenvoudigs te kunnen doen en denk meteen aan overdrijven of iets nieuws willen introduceren. Naar mijn gevoel is geen language maar een framework, een tool. Dat hoeft niet altijd even efficiŽnt te zijn en dat is het ook niet. Probleem met frameworks is dat je er afhankelijk van wordt en eigenlijk in definitie niets toevoegt behalve een nieuwe standaard. Zoals als deze afbeelding ook laat zien:
https://xkcd.com/927/
Jou voorbeeld is ook precies de use-case waarbij je geen Typescript nodig hebt. Juist bij grotere enterprise solutions is het heerlijk, ik wil niet meer anders. Ik heb een grote library gemaakt met domein modellen en services die onze back end benaderen; deze voeg ik toe in npm en kan zodoende in al onze front ends en mobile apps toegepast worden.

Voor een klein scriptje ga ik ook geen Typescript gebruiken. Als je echt wat meer gevoel wilt krijgen zeg ik: doe de Tour of heroes van angular2 eens voor de grap
Kunnen ze dan niet beter dat soort dingen integreren in de nieuwe ecmascript versie in plaats van een eigen Typescript gebeuren? Het web gaat meer naar de nieuwe ecmascript versie, en omdat Angular2 dus Typescript is gaat dat dus voor de adoptie denk ik wel tegenwerken.
Dat kan, maar het ecmascript standaardisatieproces is zo langzaam dat er tussen ES5 en ES6 wel 5 nieuwe talen ontstaan en groot geworden zijn. Een van de eerdere was Coffeescript, die veel features die nu in ES6 zitten geintroduceerd heeft (o.a. arrow functions). Daarna kwamen talen als Dart, Typescript, tools als Flow, en ze wouden voor Angular 2 eerst een eigen taal ontwikkelen, Atscript, voordat ze toch maar naar Typescript gingen (volgens mij toen deze een bepaalde feature toevoegde, ik denk annotations).

ES6 is ook IMO maar een kleine verbetering ten opzichte van ES5. Arrow functions en let/const zijn handig, de rest, mja. Classes zijn gewoon stom, een beetje zoals PHP's classes toen die rond versie 4 geintroduceerd werden (stom omdat geen private functions, properties, etc. Dus syntactic sugar rondom een function, maar dan zonder de voordelen).

Daar komt nog bij dat je als JS developer waarschijnlijk nooit ES6 zult kunnen gebruiken zonder een transpiler, niet zolang er nog browsers zijn die het niet ondersteunen. Tegen de tijd dat support acceptabel is, zal ES7 er wel zijn.

Ik heb meer vertrouwen - voor de lange termijn - in WebAssembly, een goed te optimaliseren assembly taal waar je een taal naar keuze naartoe kunt compilen. Deze zal de rol die JS nu heeft overnemen. Maar, het zal nog 5-10 jaar duren voordat je dat fatsoenlijk kunt gebruiken, waarschijnlijk. Als het ooit iets wordt.
ES5 heeft een eeuwigheid meegedaan ja, ES2015 (voorheen ES6) verraad het al een beetje, want 2016 en 2017 zijn al met de uitrol bezig. Meer kleine updates maar wel continue. Transpilation zal altijd blijven maar maakt ook dat ECMA snel en veel feedback krijgt over nieuwe inplementaties voordat ze live gaan. Overigens heeft safari vanaf versie 10 100% ES2015 dekking, en zitten de evergreen browser daar ook dicht op. Alleen jammer dat modules momenteel nog een bundler nodig hebben maar concetination van JS doen we ook alweer 10 jaar ofzo.
Typescript word gemaakt met ECMAScript in gedachte, daarnaast compileerd het ook naar ES6, ES5 en ES3.
Dan kun je beter toch Babel gebruiken?
Dan mis je nog steeds support van een aantal Typescript features, zoals autocompletion en de nieuwe features van Typescript 2.0
Daar heb je wel iets wat handig is voor de developer. Dat heeft Microsoft altijd netjes op orde.

Maar hoe zit het met iets nieuws als daar nog geen type definition files voor zijn. En of die ooit komen? Typescript is nog niet zo ingeburgerd dat voor elk stukje javascript er wel zo'n file is.
Beetje kip en ei probleem. Dus hier wordt een beetje gepraat alsof Typescript the holy grail is. Maar als ik het voor NodeJS wil gaan gebruiken kan ik gewoon vet veel libraries en frameworks niet gebruiken. Lekker dan....
FYI, je kunt ook angular2 maken in javascript, of dart. Het is niet perse Typescript.

Typescript is zoals hieronder ook al uitgelegd, een superset van ecmascript. Deze versies, 5-6-7 etc. worden niet perse door alle browsers ondersteund. Daar komt het woord polyfill bij kijken. In het geval van Typescript kun je dus gewoon je scriptjes schrijven in deze ecmascript levels en wordt het later gecompileerd naar de versie welke je aangeeft en tevens door browsers ondersteund worden.

Dat is allemaal het voordeel, oke dan heb je nog steeds geen typescript nodig. Je kunt gewoon een transpiler zoals Babel gebruiken om je ecmascript7 code om te zetten naar commonjs etc.

Typescript is een fijne laag voor mensen die graag getypeerd willen werken en betere import/export functionaliteit willen. Nogmaals zelfs voor angular hoeft het in theorie niet.
Waarom gebruiken ze bij Angular2 dan geen Babel? Zitten er soms zulke cruciale functies in TypeScript die je echt nodig hebt voor Angular2 (want anders werkt het niet) ?
Nogmaals het hoeft niet in Typescript. JavaScript is naar mijn idee een van de weinige talen waarbij geen goed DI en import systeem zit. Het is niet triviaal om shared services te maken in normaal JavaScript daarnaast is het werken met scopes ook vaak verwarrend. Zo kun je een methode binnen een JavaScript object aanroepen, de this variabel refereert dan echter niet meer aan de juiste instance.

Door het transpilen van TS naar JS is het voor de gebruiker dan ook makkelijker om dit soort logica te creŽren met angular2 & Typescript .

Standaard JavaScript heeft eigenlijk geen Dependancy Injection en type & @script voegen bij het transpilen weer metadata toe aan je classes. Dit is deels Typescript maar vooral ook Angular, met plain JS word het dan weer lastig.

Daarnaast heb je met Babel hetzelfde idee dat je runtime code verschilt van de source.
@Gopher: Ik gaf maar een voorbeeld, daarom is het ook een voorbeeld en ook voorbeeld dat niet door mijzelf is bedacht, geef ik ook aan. Want ik zo fout vind aan de frameworks is het leren van andere 'syntax' dat niet javascript specifiek is. Je leert de (eigenschappen van de ) taal niet, je leert het framework als taal. Als je dan zo graag de taal wilt veranderen, maak dan een nieuwe taal.

Zelfs meerdere malen meegemaakt dat als je dan iets maakt in plain javascript dat er personen zijn die code niet begrijpen. Dat is echt een big fail, dan is het framework als tool zijn doel voorbij geschoten. Je moet wel de basis kennen.

Bij typescript heb je nog een extra probleem, de code is gegenereerd. Iemand die geen typescript voor handen heeft kan de code dus niet/moeilijker aanpassen plus het risico dat als je het aanpast de aanpassing verloren gaat door nieuw gegenereerde code. Je verplicht in feite Typescript te gebruiken. Dat is dus een extra afhankelijkheid.

Maar goed objectiviteit is niet mogelijk want ik praat niet gewenst, vandaar dat jij een +2 krijgt (al is het mij niet om de punten te doen) en ik niet. Ik heb het er niet over of het gemakkelijker is etc, ik heb het erover dat meer nodig is om de feitelijke programmeertaal te gebruiken, het is tegenwoordig meer modelling dan programmeren. Dat vind ik geen goede ontwikkeling.
Hoi Erwines, Houd er rekening mee dat het inderdaad lastig kan zijn om dingen aan te passen. Maar we gaan nu eenmaal verder in de wereld. Misschien wil men wel niet dat die code gemakkelijk aan te passen is, hetzelfde dat Bethesda niet wilt dat jij de source van Fallout 4 gaat aanpassen.

Je kunt het vergelijken met compileren naar javascript, je kunt nou eenmaal niet al te veel talen gebruiken waarmee je software kunt maken die in de browser draait! Javascript zelf kan nog net iets te veel gepriel zijn om echt onderhoudbare software in te creeren, vandaar dat typescript vrij popuplair is bij meerdere front-end developers.
Naar mijn gevoel is geen language maar een framework, een tool. Dat hoeft niet altijd even efficiŽnt te zijn en dat is het ook niet. Probleem met frameworks is dat je er afhankelijk van wordt en eigenlijk in definitie niets toevoegt behalve een nieuwe standaard.
Typescript os ES6 (of vgm ondertussen es7) + static typing. Je kunt zo van Typescript afzijn als je wilt. Je compiled je project zonder downlevel compiling en je hebt je eigen javascript zonder dingen van typescript.

Is het een nieuwe standaard? Ik weet dat het typescript en het flow team met Ecma bezig zijn geweest. Hoe dit er nu voorstaat weet ik niet. Wel weet ik dat beide projecten dezelfde .d.ts bestanden gebruiken. En daarnaast, Microsoft moest wel, in 2012 was er niet veel voor javascript en static typing.
Twee regels of 20 regels, dat maakt nogal verschil, heb mijn javascript versie gemaakt van een simpel voorbeeld van Microsoft, een soort hello world, mijn versie was twee regelsen niet twintig. Vind het wel een nadeel zoveel ruis om iets eenvoudigs te kunnen doen en denk meteen aan overdrijven of iets nieuws willen introduceren.
Het gaat niet om het aantal regels code die jij schrijft, het gaat erom dat jou code over een jaar ook nog gesnapt word. Als je hier meer regels voor moet schrijven, dan is dat zo, maar je code moet nog vaak zat gelezen worden.

Is Typescript overkill? Voor een klein project wel waarschijnlijk, helemaal in een hello world zoals jij zelf ook al aangeeft. Typescript word interessant als je duizenden regels hebt. Typescript zorgt er namelijk voor dat je een hele hoop tooling kunt gaan draaien van een static typed language. Refactoring, go to reference, intellisense op jou code, etc. Daarnaast is het een soort linter. Het haalt er type fouten uit en zegt welke dingen in je code niet kunnen.
Naar mijn gevoel is geen language maar een framework, een tool. Dat hoeft niet altijd even efficiŽnt te zijn en dat is het ook niet.
Je uitvoerende code is gewoon jouw javascript - typings. Je kunt het downlevel compilen net als met Babel (al heeft typescript jou typings en zou het dit beter moeten kunnen dan een losstaande tool). Jouw geschreven code zal langer zijn. De verhouding is niet altijd 2:20. Je voert de types ťťn keer in en kunt ze blijven gebruiken. Je schrijft dus ook vaak zat even regels met iets extra's er tussen. Voor de tooling en checking die ik ervoor terug krijg en die mij na het typen, bijvoorbeeld als typechecker helpt, word ik juist onder de streep, ook in mijn eigen paar honderd regels projecten. Niemand schrijft foutloos en dan is het toch fijn dat je edditer al begint te klagen en niet pas je browser, Node of een andere runtime.
Het gaat inderdaad niet om het aantal regels code, maar de hele static vs dynamic typing discussie is eigenlijk een beetje zinloos want dat is gebaseerd op persoonlijke voorkeur. Static typing heeft voordelen maar ook nadelen.

Zelf werk ik niet met node maar met ruby on rails (ruby is dynamic typed) en vind het heerlijk om niet met nitpicks over verschillen tussen types en bijbehorende casting lastig te worden gevallen. Daardoor kun je bepaalde boilerplate weglaten en krijg je compactere en dus leesbaardere en dus beter beheerbare code door. Hoe goed of slecht je code is hangt niet af van typing maar van de skills van je programmeurs.

Overigens vind ik javascript sowieso een vervelende onduidelijke taal met veel te veel syntax fluff. Gelukkig is het in rails heel simpel om coffeescript te gebruiken ipv js en dat is, net als typescript, ook een laag bovenop js, maar meer gefocused op leesbaarheid.

[Reactie gewijzigd door kozue op 23 september 2016 08:59]

Daardoor kun je bepaalde boilerplate weglaten en krijg je compactere en dus leesbaardere en dus beter beheerbare code door.
offtopic:
Dat korter beter leesbaar en beheerbaar is vind ik kort door de bocht. Een voorbeeld uit de praktijk: met dynamic typing kun je elementen van verschillende soorten in dezelfde array stoppen. Itereren over een array waar zowel complexe structuren als primitive datatypes inzitten heeft meestal geen enkel nut (tenzij ze dezelfde trait/interface implementeren), maar het scheelt je wel veel 'boiler plate' code als je eigenlijk een struct zou moeten gebruiken. Zo kan je personen als arrays opslaan waarbij het eerste element zijn geboortedatum is, het tweede zijn naam, het derde zijn BSN etc. Is dat leesbaar? Nee. Is dat onderhoudbaar? Helemaal niet. Is het mogelijk met een statische taal? Wel als je overal strings voor gebruikt, maar dan ben je toch al niet meer te redden.

[Reactie gewijzigd door 84hannes op 23 september 2016 12:25]

Tsjee.. al het bovenstaande gelezen, maar zowel het artikel als de reacties geven me weinig clou over wat TrueScript eigenlijk is en waarvoor het gebruikt wordt/kan worden. :)

Zegt ws. meer over mij dan over het artikel en reacties hoor. Mooi om te zien dat we allemaal ons specialisme hebben! _/-\o_

Keep up the good work!
Want daardoor kan ik waarschijnlijk nu op een smartphone dit berichtje typen en mooie content tot me nemen :+
TypeScript is gewoon een superset van Javascript. Het gaat meer features inbouwen die ook in andere programmeertalen gevonden worden. Het gaat je code daarna compilen naar plain old Javascript, maar door deze stap ga je bv. ook veel errors al op die moment ontdekken, en niet pas als je de app/website aan het bekijken bent.
Ik gebruik Dart.

Op dit item kan niet meer gereageerd worden.



Nintendo Switch Google Pixel Sony PlayStation VR Samsung Galaxy S8 Apple iPhone 7 Dishonored 2 Google Android 7.x Watch_Dogs 2

© 1998 - 2016 de Persgroep Online Services B.V. Tweakers vormt samen met o.a. Autotrack en Carsom.nl de Persgroep Online Services B.V. Hosting door True