Kunt u beschrijven wat het typoscript taal is?
Wat kan het dat JavaScript of beschikbare bibliotheken niet kunnen doen, dat zou mij reden om het te overwegen te geven?
Kunt u beschrijven wat het typoscript taal is?
Wat kan het dat JavaScript of beschikbare bibliotheken niet kunnen doen, dat zou mij reden om het te overwegen te geven?
Ik oorspronkelijk schreef dit antwoord toen Typescript was nog warm-off-the-persen. Vijf jaar later, is dit een OK overzicht, maar kijk eens naar het antwoord Lodewijk's hieronder voor meer diepgang
Typoscript is een superset van JavaScript die voornamelijk biedt optioneel statische typen, klassen en interfaces. Een van de grote voordelen is om IDE's in staat te stellen een rijkere omgeving te bieden voor het spotten van veelvoorkomende fouten als u de code te typen .
Om een idee van wat ik bedoel te krijgen, kijken inleidende video van Microsoft's van de taal.
Voor een groot JavaScript project, de vaststelling van typoscript kan leiden tot meer robuuste software, terwijl het nog steeds inzetbaar, waar een reguliere JavaScript-applicatie zou lopen.
Het is open source, maar je alleen maar de slimme Intellisense terwijl u typt als u een ondersteunde IDE gebruiken. In eerste instantie was dit alleen van Microsoft Visual Studio (ook opgemerkt in blog post van Miguel de Icaza ). Deze dagen, andere IDE's bieden Typescript ondersteuning ook .
Er is CoffeeScript , maar dat serveert echt een ander doel. IMHO, CoffeeScript biedt leesbaarheid voor de mens, maar typoscript ook diep leesbaarheid voor gereedschappen via haar optionele statische typen (zie deze recente blog post voor een beetje meer kritiek). Er is ook Dart , maar dat is een volledig op de vervanging JavaScript (hoewel het JavaScript-code kan produceren )
Als voorbeeld, hier is een aantal typoscript (je kunt spelen met deze in de typoscript Playground )
class Greeter {
greeting: string;
constructor (message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
En hier is de JavaScript zou produceren
var Greeter = (function () {
function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.greet = function () {
return "Hello, " + this.greeting;
};
return Greeter;
})();
Merk op hoe de typoscript definieert het type lid variabelen en klasse methode parameters. Deze wordt verwijderd bij het vertalen JavaScript, maar door de IDE en compiler fouten spot, zoals langs numerieke waarde aan de constructor.
Het is ook geschikt voor het afleiden van soorten die niet expliciet worden aangegeven, bijvoorbeeld, zou het bepalen van de greet()methode een string retourneert.
Veel browsers en IDE's bieden directe ondersteuning debugging door middel sourcemaps. Zie deze vraag stack overflow voor meer informatie: Debuggen Typescript code met Visual Studio
Ik oorspronkelijk schreef dit antwoord toen Typescript was nog warm-off-the-persen. Check out antwoord Lodewijk's op deze vraag voor wat meer stroom detail.
Hoewel de geaccepteerde antwoord is prima, ik voelde het echt niet typoscript recht te doen op dit punt. Het is niet de eerste dagen niet meer. Typoscript is het vinden van een stuk meer adoptie nu met een aantal populaire frameworks geschreven met de schrijfmachine. De redenen waarom u typoscript moet kiezen in plaats van JavaScript zijn nu vele.
JavaScript is gestandaardiseerd door de ECMAScript-normen. Niet alle browsers in gebruik ondersteuning alle functies van nieuwere ECMAScript normen (zie de tabel ). Typescript ondersteunt nieuwe ECMAScript normen en compileert hen om (oudere) ECMAScript doelstellingen van uw keuze (huidige doelstellingen 3, 5 en 6 [aka 2015]). Dit betekent dat u kenmerken van ES2015 kunnen gebruiken en daarbuiten, zoals modules, lambda functies, klassen, de verspreiding operator, destructurering, vandaag. Het voegt ook typen steun van cursus, die geen deel uitmaakt van elke ECMAScript-standaard en kan waarschijnlijk nooit meer te wijten zijn aan de geïnterpreteerde de natuur in plaats van gecompileerde aard van JavaScript. Het systeemtype getypte relatief rijk en bevat: interfaces, opsommingen, hybride, generieke, vereniging en doorsnede vormen, toegang modifiers en nog veel meer. De officiële website van typoscript geeft een overzicht van deze functies.
Typoscript heeft een unieke filosofie in vergelijking met andere talen die compileren JavaScript. JavaScript-code is geldig typoscript code; Typoscript is een superset van JavaScript. U kunt bijna de naam van uw .jsbestanden naar .tsbestanden en beginnen met typoscript. Typescript bestanden worden gecompileerd om JavaScript leesbaar zodat migratie terug mogelijk is en het begrip van de gecompileerde typoscript is helemaal niet moeilijk. Op deze manier Typescript bouwt voort op de successen van JavaScript, terwijl de verbetering op zijn zwakke punten.
Aan de ene kant heb je toekomstvaste tools die moderne ECMAScript normen en te compileren naar beneden om oudere JavaScript versies met Babel zijn de meest populaire. Aan de andere kant heb je talen die totaal kunnen verschillen van JavaScript die JavaScript, zoals Coffeescript, Clojure, Dart, Elm, Haxe, ScalaJs richten, en een hele reeks meer (zie de lijst ). Deze talen, hoewel ze beter dan waar de toekomstige JavaScript ooit zou kunnen leiden zou kunnen zijn, lopen een groter risico van het niet vinden van voldoende goedkeuring voor hun toekomst worden gewaarborgd. Je zou ook meer moeite met het vinden ervaren ontwikkelaars voor een aantal van deze talen, maar degene die je zult vinden vaak enthousiaster kunnen zijn. Interop met JavaScript kan ook een beetje meer betrokken zijn, omdat ze verder van wat JavaScript eigenlijk is verwijderd.
Typescript ligt tussen deze twee uitersten, waardoor het risico balanceren. Typoscript is niet een riskante keuze door elke standaard. Het kost weinig moeite om te wennen aan als je bekend bent met JavaScript zijn, want het is niet een heel andere taal, heeft een uitstekende JavaScript interoperabiliteit te ondersteunen en het heeft veel van de adoptie onlangs gezien.
JavaScript wordt dynamisch getypt. Dit betekent dat JavaScript niet weet wat voor soort een variabele is, totdat het daadwerkelijk wordt geconcretiseerd in run-time. Dit betekent ook dat het te laat kunnen zijn. Typescript voegt typen steun aan JavaScript. Bugs die worden veroorzaakt door onjuiste veronderstellingen van enkele variabele wezen van een bepaald type kan volledig worden uitgeroeid als je speelt je kaarten goed; hoe streng je typt uw code of als u uw code typt helemaal is aan jou.
Typoscript maakt het typen een stuk makkelijker en veel minder expliciet door het gebruik van het type gevolgtrekking. Bijvoorbeeld: var x = "hello"de schrijfmachine is gelijk var x : string = "hello". Het type is gewoon afgeleid uit het gebruik ervan. Zelfs het u niet expliciet typt u de types, ze zijn er nog steeds om je te redden van iets dat anders zou resulteren in een run-time fout doen.
Typescript eventueel getypt standaard. Bijvoorbeeld function divideByTwo(x) { return x / 2 }is een geldig functie met de schrijfmachine, die kunnen worden opgeroepen met elk soort parameter, ook al noemde het met een string zal uiteraard resulteren in een runtime error. Net zoals je gewend bent in JavaScript. Dit werkt, want als er geen soort expliciet werd toegewezen en het soort niet kon worden afgeleid, zoals in het divideByTwo voorbeeld, typoscript impliciet het type toe te wijzen any. Dit betekent dat soort handtekening van de divideByTwo functie is, wordt automatisch function divideByTwo(x : any) : any. Er is een compiler vlag om dit gedrag te verbieden: --noImplicitAny. Het inschakelen van deze vlag geeft u een grotere mate van veiligheid, maar betekent ook dat je meer zal moeten typen doen.
Types hebben een kosten die gepaard gaan met hen. Allereerst is er een leercurve, en ten tweede, natuurlijk, het kost je een beetje meer tijd om het opzetten van een codebase met de juiste strikte typen ook. In mijn ervaring, deze kosten zijn absoluut de moeite waard op een serieuze codebase u deelt met anderen. Een grootschalig onderzoek van programmeertalen en kwaliteit van de code in Github suggereert dat "die statisch getypeerde talen in het algemeen minder defect gevoelig dan de dynamische types, en dat een sterke typering is beter dan zwak typen in dezelfde regard".
Het is interessant om op te merken dat dit zeer dezelfde krant vindt dat typoscript is minder foutgevoelig dan JavaScript:
Voor mensen met positieve coëfficiënten kunnen we verwachten dat de taal behoort bij ongewijzigde omstandigheden, een groter aantal fixes. Deze talen zijn C, C ++, JavaScript , Objective-C, PHP en Python. De talen Clojure, Haskell, Ruby, Scala en Typescript alle negatieve coëfficiënten impliceert dat deze talen minder waarschijnlijk dan het gemiddelde te resulteren in defecten bevestiging verbindt.
De ontwikkeling ervaring met typoscript is een grote verbetering ten opzichte van JavaScript. De IDE wordt geïnformeerd in real-time door de typoscript compiler op haar rijke soort informatie. Dit geeft een paar grote voordelen. Bijvoorbeeld, met typoscript kunt u veilig refactorings als hernoemt uw hele codebase doen. Door middel van code completion kun je inline hulp op welke functies een bibliotheek kan bieden krijgen. Niet meer nodig om ze te herinneren of ze opzoeken in de online gevonden. Compilatie fouten worden direct gerapporteerd in de IDE met een rode squiggly lijn, terwijl je bezig bent codering. Al met al zorgt voor een aanzienlijke stijging van de productiviteit in vergelijking met het werken met JavaScript. Men kan meer tijd codering en minder tijd debuggen door te brengen.
Er is een breed scala van IDE's die uitstekende ondersteuning voor typoscript hebben, zoals Visual Studio & VS code, Atom, Sublime en IntelliJ / WebStorm.
Runtime fouten van het formulier cannot read property 'x' of undefinedof undefined is not a functionworden zeer vaak veroorzaakt door fouten in JavaScript-code. Uit de doos getypte al verkleint de kans op dit soort fouten optreden, aangezien men een variabele die niet bekend is met de schrijfmachine compiler kan gebruiken (uitgezonderd eigenschappen van anygetypeerde variabelen). Het is nog wel mogelijk om een variabele die is ingesteld op ten onrechte gebruiken undefined. Echter, met de 2.0-versie van de schrijfmachine kun je dit soort fouten allemaal bij elkaar te elimineren door het gebruik van niet-nullable types. Dit werkt als volgt:
Met strenge null controles ingeschakeld ( --strictNullCheckscompiler vlag) zal het typoscript compiler niet toestaan undefinedte worden toegewezen aan een variabele, tenzij u expliciet verklaren van nullable type. Zo let x : number = undefinedresulteert een compileerfout. Dit sluit perfect aan bij het type theorie, daar undefinedis geen getal. Men kan definiëren xeen bedrag type zijn numberen undefineddit te corrigeren: let x : number | undefined = undefined.
Zodra een type is bekend nullable te zijn, wat betekent dat het van een type dat ook de waarde kan zijn nullof undefinedde schrijfmachine compiler kan bepalen door besturing stroomgebaseerde soort analyse of code veilig een variabele kan gebruiken of niet. Met andere woorden: bij het inchecken een variabele is undefineddoor middel van bijvoorbeeld een ifverklaring van het typoscript compiler zal concluderen dat het type in deze tak van de controle stroom van je code is niet meer vernietigbaar en kan daarom veilig worden gebruikt. Hier is een eenvoudig voorbeeld:
let x: number | undefined;
if (x !== undefined) x += 1; // this line will compile, because x is checked.
x += 1; // this line will fail compilation, because x might be undefined.
Tijdens de build 2016 conferentie co-ontwerper van typoscript Anders Hejlsberg gaf een gedetailleerde uitleg en demonstratie van deze functie: video (van 44:30 tot 56:30).
Om typoscript gebruikt u een bouwproces te compileren om JavaScript-code nodig. Neemt het bouwproces in het algemeen slechts een paar seconden uiteraard afhankelijk van de grootte van uw project. Het logbestand compiler ondersteunt incrementele compilatie ( --watchcompiler vlag), zodat alle verdere wijzigingen kunnen worden samengesteld in hogere snelheid.
De Typescript compiler kan bron kaartinformatie inline in de gegenereerde Js bestanden of maak aparte .map bestanden. Source kaart informatie kan worden gebruikt door het debuggen van nutsbedrijven, zoals de Chrome DevTools en andere IDE om de lijnen in de JavaScript betrekking hebben op degenen die hen in de typoscript gegenereerd. Dit maakt het mogelijk voor u om breakpoints en variabelen inspecteren tijdens runtime rechtstreeks op uw typoscript code. Bron kaartinformatie werkt vrij goed, het was rond lang voordat typoscript, maar debugging typoscript is over het algemeen niet zo groot als bij het gebruik van JavaScript rechtstreeks. Neem het thiszoekwoord bijvoorbeeld. Vanwege de veranderde semantiek van het thiszoekwoord rond sluitingen sinds ES2015, thiskan daadwerkelijk bestaat tijdens runtime een variabele genaamd _this(zie deze reactie ). Dit kan verwarren u tijdens het debuggen, maar over het algemeen is geen probleem als je weet over het of inspecteren van de JavaScript-code. Opgemerkt dient te worden dat Babel lijdt precies dezelfde soort zaken.
Er zijn een paar andere trucs het typoscript compiler kan doen, zoals het genereren van het onderscheppen van code op basis van decorateurs , het genereren van laden van de module code voor verschillende module systemen en het ontleden JSX . Maar, zult u waarschijnlijk nodig een build hulpmiddel naast de Typescript compiler. Bijvoorbeeld als u wilt uw code te comprimeren moet je andere instrumenten toe te voegen aan uw bouwproces te doen.
Er zijn Typescript compilatie plugins beschikbaar voor Webpack , Gulp , Grunt en vrijwel elke andere JavaScript-build programma dan ook. De typoscript documentatie staat een sectie over integratie met hulpmiddelen om te bouwen die hen allen. Een Linter is ook beschikbaar voor het geval je zou nog meer willen bouwen in de tijd controleren. Er zijn ook een groot aantal zaden projecten die er zijn dat helpt u op weg met de schrijfmachine in combinatie met een heleboel andere technologieën zoals Angular 2, React, Ember, SystemJs, WebPack, Gulp, etc.
Omdat Typescript zo nauw verwant aan JavaScript het heeft grote interoperabiliteit mogelijkheden, maar wat extra werk nodig is om te werken met JavaScript-bibliotheken met de schrijfmachine. Typescript definities zijn nodig zodat de typoscript compiler begrijpt die functie oproepen als _.groupByof angular.copyof $.fadeOutin feite niet illegaal statements. De definities voor deze functies worden geplaatst in .d.tsbestanden.
De eenvoudigste vorm een definitie kan nemen is om een identificatie te gebruiken in any way. Bijvoorbeeld, bij het gebruik van Lodash , een enkele lijn definitie bestand declare var _ : anykunt u een functie die u wilt op te bellen _, maar dan natuurlijk bent u ook nog steeds in staat om fouten te maken: _.foobar()zou een wettelijke typoscript gesprek zijn, maar is natuurlijk een illegale oproep bij run-time. Als u het juiste type ondersteuning en code completion wilt dat uw definitie bestand moet om precies te zijn (zie lodash definities voor een voorbeeld).
Npm modules die zijn voorverpakt met eigen typedefinities automatisch begrepen door de schrijfmachine compiler (zie documentatie ). Voor vrijwel alle andere semi-populaire JavaScript-bibliotheek die geen eigen definities iemand bevat die er al typedefinities beschikbaar via een andere NPM module gemaakt. Deze modules worden voorafgegaan door "@ typen /" en komen uit een GitHub repository genaamd DefinitelyTyped .
Er is een addertje onder het gras: het type definities moet de versie van de bibliotheek die u gebruikt in run-time aan te passen. Als ze dat niet doen, misschien typoscript u niet toe te staan van het bellen van een functie of dereferentie een variabele die bestaan of toestaan om een functie aan te roepen of dereference een variabele die niet bestaat, simpelweg omdat de types niet overeenkomen met de run-time tijdens het compileren . Dus zorg ervoor dat u de juiste versie van het type definities te laden voor de juiste versie van de bibliotheek die u gebruikt.
Om eerlijk te zijn, is er een lichte gedoe om dit en het kan een van de redenen waarom je niet kiest typoscript, maar in plaats daarvan gaan voor iets als Babel, die geen last van de verplichting om typedefinities krijgen op alle. Aan de andere kant, als je weet wat je aan het doen bent kunt u gemakkelijk elke vorm van problemen veroorzaakt door onjuiste of ontbrekende definitie bestanden te overwinnen.
Elk .jsbestand kan worden hernoemd naar een .tsen liep door het typoscript compiler om syntactisch krijgt dezelfde JavaScript-code als een uitgang (als het syntactisch correct in de eerste plaats). Zelfs wanneer de typoscript compiler compilatiefouten krijgt zal het nog steeds produceren een .jsbestand. Het kan zelfs accepteren .jsbestanden als input bij de --allowJsvlag. Dit stelt u in staat om te beginnen met de schrijfmachine meteen. Helaas compilatiefouten zijn te verwachten in het begin. Men hoeft te onthouden dat deze niet zien-het stoppen van fouten, zoals u kan worden gebruikt om met andere compilers.
De compilatiefouten krijgt men in het begin bij het omzetten van een JavaScript-project om een typoscript project onvermijdelijk zijn van nature Typescript's. Typescript controleert alle code op geldigheid en dus het moet weten over alle functies en variabelen die worden gebruikt. Zo moeten typedefinities worden in de plaats voor hen allen anders compilatie fouten zijn gebonden aan optreden. Zoals vermeld in het vorige hoofdstuk, voor vrijwel elke JavaScript-raamwerk zijn er .d.tsbestanden die gemakkelijk kunnen worden verkregen met de installatie van DefinitelyTyped pakketten . Het kan echter zijn dat u hebt gebruikt een aantal obscure bibliotheek waarvoor geen typoscript definities beschikbaar zijn of dat je hebt polyfilled enkele JavaScript primitieven. In dat geval moet u het type definities van deze bits te leveren, zodat de compilatie fouten verdwijnen. Je maakt gewoon een .d.tsbestand en dit opnemen in de tsconfig.json de filesarray, zodat het altijd door de typoscript compiler wordt beschouwd. Daarin verklaren die stukjes die typoscript niet weet over als type any. Zodra u alle fouten hebt uitgeschakeld kunt u geleidelijk het typen op die delen volgens uw behoeften.
Sommige werken op (her) configureren van uw build pijplijn zal ook nodig zijn om typoscript krijgen in de opbouw pijplijn. Zoals vermeld in het hoofdstuk over de compilatie zijn er tal van goede middelen die er zijn en ik moedig u om te zoeken naar zaad projecten die de combinatie van tools die u wilt om samen te werken met het gebruik.
De grootste hindernis is de leercurve. Ik moedig u aan om rond te spelen met een klein project op het eerste. Kijk hoe het werkt, hoe het bouwt, welke bestanden die gebruikt worden, hoe het is geconfigureerd, hoe het functioneert in uw IDE, hoe het is opgebouwd, welke hulpmiddelen die gebruikt worden, enz. Het omzetten van een groot JavaScript codebase om typoscript is zeer goed te doen als je weet wat je doet, maar het kan frustrerend zijn als je dat niet doet.
Typescript is open source (Apache 2 licentie, zie GitHub ) en wordt ondersteund door Microsoft. Anders Hejlsberg , de lead architect van C # is een toonaangevende rol in het project. Het is een zeer actieve project; het typoscript team is het vrijgeven van een groot aantal nieuwe functies in de afgelopen jaren en veel groten zijn nog steeds van plan te komen (zie de roadmap ).
In de 2017 StackOverflow ontwikkelaar onderzoek typoscript was de meest populaire JavaScript transpiler (9e plaats overall) en won de derde plaats in de meest geliefde categorie programmeertaal.
Typoscript doet iets wat lijkt op wat minder of Sass doet voor CSS. Ze zijn super sets ervan, wat betekent dat elke JS code die u schrijft is geldig Typescript code. Plus kunt u de andere goodies die het toevoegt aan de taal te gebruiken, en de transpiled code geldig js. U kunt zelfs de JS-versie die u wilt dat uw resulterende code op.
Momenteel typoscript is een super set van ES2015, dus misschien een goede keuze om te beginnen met het leren van de nieuwe js functies en transpile om de benodigde standaard voor uw project.
" Typescript Fundamentals " - een Pluralsight video-gangen door Dan Wahlin en John Papa is een echt goed, op dit moment (25 maart 2016) bijgewerkt om typoscript 1,8 reflecteren, inleiding tot typoscript.
Voor mij is het echt goede eigenschappen, naast de mooie mogelijkheden voor intellisense, zijn de klassen , interfaces , modules , het gemak van de uitvoering van AMD, en de mogelijkheid om de Visual Studio Typescript debugger gebruiken wanneer aangeroepen met IE.
Om samen te vatten : Indien gebruikt zoals bedoeld, kan Typescript JavaScript programmeren betrouwbaarder en eenvoudiger te maken. Het kan de productiviteit van de JavaScript-programmeur beduidend over de volledige SDLC te verhogen.
ECMA-script 5 (ES5), die alle browser ondersteuning en voorgecompileerde. ES6 / ES2015 en ES / 2016 kwam dit jaar met veel veranderingen, zodat om pop-up deze veranderingen is er iets tussen dat moet zorgen duurt ongeveer zo typoscript. • Typescript is Types -> betekent dat we moeten datatype van elke woning en methoden. Als u weet dat C # dan Typescript is gemakkelijk te begrijpen. • Groot voordeel van typoscript is dat we identity type gerelateerde zaken vroeg voordat ze naar de productie. Dit maakt het mogelijk unit tests om te mislukken als er een soort mismatch.