Tud kérjük, írja le, amit a géppel nyelv?
Mi lehet ez csinálni, hogy a JavaScript vagy elérhető könyvtárak nem tudja, hogy adna nekem ok arra, hogy ez?
Tud kérjük, írja le, amit a géppel nyelv?
Mi lehet ez csinálni, hogy a JavaScript vagy elérhető könyvtárak nem tudja, hogy adna nekem ok arra, hogy ez?
Én eredetileg írtam ezt a választ, amikor géppel még meleg volt-off-the-prések. Öt évvel később, ez egy OK áttekintést, de nézd meg Lodewijk válasza alább részletesebben
Gépelt felülbírálja a JavaScript, amely elsősorban olyan opcionális statikus gépelési, osztályok és interfészek. Az egyik nagy előnye, hogy lehetővé tegye IDE, hogy egy gazdagabb környezetet pecsételő gyakori hibák , ahogy írja be a kódot .
Ahhoz, hogy egy ötlet, hogy mire gondolok, nézni a Microsoft bevezető videót a nyelvet.
Egy nagy JavaScript projekt elfogadásáról géppel vezethet erőteljesebb szoftver, miközben továbbra is bevethető, ahol egy szabályos JavaScript alkalmazás futna.
Ez nyílt forráskódú, de csak akkor kap az okos Intellisense gépelés, ha egy támogatott IDE. Kezdetben ez csak a Microsoft Visual Studio (szintén megjegyezte blogbejegyzést Miguel de Icaza ). Ezek a napok, más IDE-hez géppel támogatás is .
Van CoffeeScript , de ez tényleg más célt szolgál. IMHO, CoffeeScript biztosítja az olvashatóságot az emberek, hanem géppel is rendelkezik, mély olvashatóság az eszközök révén tetszőleges statikus gépelési (lásd ezt a blogbejegyzésben egy kicsit több kritika). Van még Dart , de ez a teljes lecserélésével a JavaScript (bár képes JavaScript kódot )
Példaként itt van néhány géppel (játszhat ezzel a géppel Playground )
class Greeter {
greeting: string;
constructor (message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
És itt van a JavaScript lenne előállítani
var Greeter = (function () {
function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.greet = function () {
return "Hello, " + this.greeting;
};
return Greeter;
})();
Figyeljük meg, hogy a géppel típusát határozza meg tagváltozóival és az osztály paraméter. Ez eltávolítja a fordítás, hogy a JavaScript, de az IDE használja és fordító észrevenni a hibákat, mint halad a numerikus típusú a kivitelező.
Ez is képes levezetése típusok, amelyeket nem kifejezetten kijelentette például, hogy meghatározzák azokat a greet()metódus visszaad egy string.
Sok böngésző és IDE-hez közvetlen hibakeresés támogatást sourcemaps. Lásd ezt a kérdést Veremtúlcsordulás További részletek: hibakeresés géppel kódot a Visual Studio
Én eredetileg írtam ezt a választ, amikor géppel még meleg volt-off-the-prések. Távozás Lodewijk válasza erre a kérdésre még néhány aktuális részlet.
Bár az elfogadott válasz rendben van, úgy éreztem, hogy tényleg nem csinál géppel igazságosság ezen a ponton. Ez nem az első napokban már. Gépelt megtalálása sokkal elfogadása most több népszerű keretek van írva a géppel. Az ok, amiért érdemes választani géppel JavaScript helyett sokan vannak már.
JavaScript szabványosították az ECMAScript szabványoknak. Nem minden böngésző használata támogatja az összes funkciót az újabb ECMAScript szabványok (lásd ezt a táblázatot ). Gépelt támogatja az új ECMAScript szabványok és rendszerbe foglalja azokat a (régebbi) ECMAScript célokat az Ön által választott (jelenlegi célok a 3, 5 és 6 [aka 2015]). Ez azt jelenti, hogy tudod használni jellemzői ES2015 és azon túl, mint a modulok, lambda függvények, osztályok, terjedésének üzemeltető bomlasztás, ma. Azt is hozzáteszi, írja támogatása természetesen, ami nem része semmilyen ECMAScript szabvány előírásainak, és valószínűleg soha nem lesz köszönhető, hogy a természet értelmezni helyett összeállított jellegét JavaScript. A típusrendszerével géppel viszonylag gazdag és a következőket tartalmazza: felületek, enums, hibrid típusok, generikus gyógyszerek, unió és kereszteződés típusok, hozzáférés-módosító és még sok más. A hivatalos honlapja a géppel áttekintést ad ezeket a funkciókat.
Gépelt egyedülálló filozófia, mint a többi nyelvek összeállításához a JavaScript. JavaScript kód érvényes géppel kódja; Gépelt felülbírálja a JavaScript. Akkor szinte átnevezni a .jsfájlokat .tsfájlokat, és a géppel. Gépelt fájlok összeállítani, hogy olvasható a JavaScript úgy, hogy a migráció vissza lehet és nem értelmezte a lefordított géppel nem nehéz egyáltalán. Így géppel az eredményekre épít JavaScript miközben javítja annak gyengeségeit.
Egyrészt, akkor időtálló eszközöket, amelyek figyelembe modern ECMAScript szabványok és fordítsd le, hogy a régebbi JavaScript változatban Babel hogy az egyik legnépszerűbb. Másrészt, van nyelveket is teljesen eltérnek JavaScript megcélzó JavaScript, mint Coffeescript, Clojure, Dart, szil, Haxe, ScalaJs, és egy egész sereg több (lásd ezt a listát ). Ezek a nyelvek, bár lehet, hogy jobb, mint ahol a JavaScript jövőben esetleg elveszett vezethet, fuss nagyobb a veszélye, hogy nem talált elég elfogadását jövőjüket biztosítani kell. Lehet, hogy még több bajt találni tapasztalt fejlesztők néhány ilyen nyelv, de az is meg fogja találni gyakran több lelkes. Együttműködéshez szükséges a JavaScript is lehet egy kissé bonyolultabb, mivel azok még távolabb a mi JavaScript valójában.
Gépelt ül a két véglet között, így egyensúlyozzák a kockázatot. Géppel nem kockázatos választás bármely szabványos. Nagyon kevés erőfeszítés kell szokni, hogy ha ismerik a JavaScript, mivel ez nem egy teljesen más nyelvet, kiváló JavaScript átjárhatóság támogatása és sokat látott elfogadásának közelmúltban.
JavaScript dinamikusan típusos. Ez azt jelenti, a JavaScript nem ismeri, hogy milyen típusú a változó, amíg ténylegesen példányosítva futási időben. Ez azt is jelenti, hogy lehet, hogy túl késő. Gépelt hozzáteszi írja támogatást JavaScript. Bugs által okozott téves feltételezései néhány változó lény egy bizonyos típusú lehet teljesen megszüntetni, ha játszik a kártyák jobb; milyen szigorú beírja a kódot, vagy ha beírja a kódot egyáltalán rajtad.
Gépelt gépelés egy kicsit könnyebb és sokkal kevésbé kifejezett a használat típusú következtetést. Például: var x = "hello"géppel ugyanaz, mint var x : string = "hello". A típus egyszerűen levezethető a használatát. Még ez nem kifejezetten írja a fajta, még mindig ott vannak, hogy mentse meg a cselekvéstől, amely egyébként vezetne futásidejű hiba.
Géppel adott beírt alapértelmezés szerint. Például function divideByTwo(x) { return x / 2 }egy érvényes funkciót géppel, amely hívható bármilyen fajta paraméter, bár hív meg egy húr nyilvánvalóan eredményez futásidejű hiba. Akárcsak arra használják, hogy a JavaScript. Ez működik, mert ha nincs típus kifejezetten hozzárendelve, és a típus nem vezethető, mint a divideByTwo például géppel implicit módon rendelheti típus any. Ez azt jelenti, hogy divideByTwo függvény típusú aláírás automatikus lesz function divideByTwo(x : any) : any. Van egy fordítóprogram zászló, hogy ne engedélyezze ezt a viselkedést: --noImplicitAny. A jelölő ad a nagyobb fokú biztonságot, hanem azt jelenti, hogy többet kell tennie a gépelést.
Típusok költség velük kapcsolatban. Először is van egy tanulási görbe, és a második is, persze, ez fog kerülni egy kicsit több időt, hogy hozzanak létre egy codebase segítségével megfelelő szigorú gépelés is. Az én tapasztalatom szerint ezek a költségek teljesen megéri bármilyen súlyos codebase Ön megosztott másokkal. Egy nagyszabású tanulmány a programozási nyelvek és a kódex minőség Github azt sugallja, hogy „hogy statikusan típusos nyelv általában kevésbé hajlamosak hiba, mint a dinamikus típus, és hogy az erős gépelés jobb, mint gyenge gépelési ugyanebben a tekintetben.”
Érdekes megjegyezni, hogy ez ugyanaz a papír megállapítja, hogy géppel kevesebb hibalehetőséget majd JavaScript:
Azoknak a pozitív együtthatók azt várhatjuk, hogy a nyelv társul, ceteris paribus, a nagyobb számú hiba javítások. Ezek a nyelvek közé tartozik a C, C ++, JavaScript , Objective-C, PHP, Python. A nyelvek Clojure, Haskell, Ruby, Scala, és géppel , mind negatív együtthatók arra utal, hogy ezek a nyelvek esetében kevésbé valószínű, mint az átlagos eredményez hibát rögzítő követ.
A fejlesztés tapasztalat géppel egy nagy előrelépést jelent a JavaScript. Az IDE értesül valós időben a géppel fordítója gazdag információt. Ez ad egy pár nagy előnye. Például, géppel végezhető el biztonságosan refactorings mint Átnevezi akár teljes codebase. Keresztül kódkiegészítés kaphat inline segítséget bármilyen funkciót a könyvtár is kínál. Nincs több kell emlékezni, vagy nézz utána az online hivatkozásokat. Összeállítás hibákat jelenti közvetlenül a IDE egy piros kígyózó sorban, amíg vannak elfoglalva kódolás. Mindent egybevéve ez lehetővé teszi a jelentős növekedés a termelékenység, mint a dolgozó JavaScript. Egy több időt tölthetnek kódolás, és kevesebb időt hibakeresés.
Van egy széles körű IDE, hogy a kiváló támogatást géppel, mint a Visual Studio & VS kódot, Atom, Sublime és IntelliJ / WebStorm.
Runtime hibák az űrlap cannot read property 'x' of undefinedvagy undefined is not a functionnagyon gyakran okozta hibákat JavaScript kódot. Out of the box géppel már csökkenti annak a valószínűségét az ilyen típusú hibák fordulnak elő, mert nem lehet egy változót, hogy nem ismert, hogy a géppel fordító (kivéve tulajdonságait anybeírt változók). Továbbra is lehetséges, bár tévesen használják a változó beállítása undefined. Azonban a 2.0 verziója géppel akkor megszünteti az ilyen típusú hibák együttesen használata révén nem lehet üres típusok. Ez a következőképpen működik:
A szigorú ellenőrzések null engedélyezett ( --strictNullCheckscompiler zászló) a géppel fordító nem teszi undefinedhozzá kell rendelni egy változót, ha kifejezetten kijelentik, hogy legyen a nullképes típusát. Például let x : number = undefinederedményez fordítási hiba. Ez teljes mértékben megfelel típusú elmélet, hiszen undefinednem egy szám. Egy meghatározhatja x, hogy egy összeg típusú numberés undefinedennek korrigálására: let x : number | undefined = undefined.
Ha egy típus ismert, hogy lehet üres, ami azt jelenti, olyan típusú, amely szintén az érték nullvagy undefineda géppel fordító tudja meghatározni a kontroll-flow alapú típusú elemzés e vagy sem a kód is biztonságosan használható a változó, vagy sem. Más szóval, ha ellenőrizni, hogy egy változó undefinedsegítségével például egy ifnyilatkozatot a géppel fordítóprogram következtetni, hogy a típust az adott ága a kód ellenőrzése áramlás már nem lehet üres, és ezért biztonságosan használhatók. Itt egy egyszerű példa:
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.
Az építmények 2016 konferencia társ-tervezője géppel Anders Hejlsberg részletes magyarázatot adott és demonstrációs ezt a funkciót: video (-tól 44:30 és 56:30).
Ahhoz, hogy használni géppel van szükség összeállítási folyamat lefordítani a JavaScript kódot. A fordítási folyamat általában mindössze néhány másodpercet függően természetesen a projekt méretét. A géppel fordító támogatja inkrementális összeállítás ( --watchcompiler zászló), hogy minden későbbi változásokat lehet összeállítani nagyobb sebességgel.
A géppel fordító tudja inline forrás térkép-információk a generált Js fájlokat, vagy hozzon létre külön .map fájlokat. Forrás térkép információt fel lehet használni a hibakeresés segédprogramok, mint a Chrome DevTools és más IDE kapcsolódnak a sorokat a JavaScript az is, hogy a generált őket a géppel. Ez lehetővé teszi az Ön számára, töréspont és vizsgáljuk változók futás közben közvetlenül a géppel kódot. Forrás térkép-információk működik elég jó, akkor már jóval azelőtt géppel, de a hibakeresés géppel általában nem olyan nagy, mint amikor a JavaScript közvetlenül. Vegyük a thiskulcsszó például. A megváltozott szemantikája thiskulcsszó köré bezárások óta ES2015, thistalán valóban létezik futás közben, mint egy változó nevű _this(lásd ezt a választ ). Ez megzavarhatja során Ön hibakeresés, de általában nem jelent problémát, ha tud róla, vagy ellenőrzi a JavaScript-kódot. Meg kell jegyezni, hogy a Babel szenved pontosan ugyanolyan kérdés.
Van még néhány további trükkel a géppel fordító tehet, mint a termelő elfogó kód alapján lakberendezők , generáló modul betöltése kódot különböző modul rendszerek és elemzési JSX . Azonban, akkor valószínűleg szükség build eszköz mellett géppel fordító. Például, ha azt szeretné, hogy tömöríteni a kódot akkor kell hozzá más eszközöket a fordítási folyamat megtenni.
Vannak géppel összeállítás elérhető bővítmények Webpack , Gulp , Grunt és elég sok minden más a JavaScript build eszköz odakint. A géppel dokumentációt egy szakaszt integrálja a fordításához szükséges eszközöket lefedő őket. A szőtt is kapható Amennyiben szeretne még több építeni időt megnézni. Van még egy nagy számú mag projektek, hogy ott lesz akkor kezdődött géppel együtt egy csomó más technológiák, mint a szögletes 2 reagált, Ember, SystemJs, WebPack, korty, stb
Mivel géppel oly szorosan kapcsolódik a JavaScript, hogy nagy átjárhatóság képességekkel, de néhány extra munkát igényel, hogy működjön együtt a JavaScript könyvtárak géppel. Gépelt meghatározások van szükség annak érdekében, hogy a géppel fordító megérti, hogy függvényhívásokkal mint _.groupByvagy angular.copy, vagy $.fadeOutvalójában nem törvénytelen kijelentéseket. A definíciók Ezen funkciók kerülnek .d.tsfájlokat.
A legegyszerűbb definíció vehet az, hogy egy azonosító használatát semmilyen módon. Például ha Lodash , egy sorban definíciós fájl declare var _ : anylehetővé teszi, hogy hívja bármilyen kívánt funkciót a _, de akkor természetesen akkor is mindig képes hibázni: _.foobar()lenne egy jogi géppel hívást, de természetesen egy illegális hívás futási időben. Ha azt szeretnénk, megfelelő típusú támogatás és kódkiegészítés a definíciós fájl kell, hogy legyen pontos (lásd lodash meghatározásokat példája).
NPM modulokat , hogy jöjjön előre csomagolt saját definíciókat automatikusan érteni a géppel fordító (lásd dokumentáció ). Mert elég sok minden más félig népszerű JavaScript könyvtár, amely nem tartalmazza a saját definíciók valaki odakint már tett meghatározások keresztül elérhető más NPM modult. Ezek a modulok előtaggal „@ típusú /” és olyan GitHub repository nevű DefinitelyTyped .
Van egy kivétellel: a meghatározások meg kell egyeznie a könyvtár verzióját használja futási időben. Ha ezt nem teszik, géppel lehet tiltsa Önt egy funkció vagy visszahivatkozási olyan változó, amely létezik, vagy lehetővé teszi, hogy hívja a funkció vagy dereference olyan változó, amely nem létezik, egyszerűen azért, mert a modell nem felel meg a run-time fordításkor . Ügyeljen arra, hogy töltse be a megfelelő verziót a meghatározások a megfelelő könyvtár verzióját használja.
Hogy őszinte legyek, van egy kis gond, hogy ez és ez lehet az egyik oka annak, hogy nem választhat géppel, hanem megy valami hasonló Babel, amely nem szenved attól, hogy típusdefiníciókat egyáltalán. Másrészt, ha tudod, mit csinálsz akkor könnyen legyőzni bármilyen által okozott problémák hibás vagy hiányzó definíciós fájlokat.
Bármilyen .jsfájlt kell átnevezni egy .tsés futott végig a géppel fordítóprogram, hogy szintaktikailag azonos JavaScript kódot kimeneti (ha volt szintaktikailag helyes az első helyen). Még ha a géppel fordító kapja fordítási hibák akkor is termelnek .jsfájlt. Azt is elfogadja .jsfájlokat bevinni a --allowJszászlót. Ez lehetővé teszi, hogy kezdeni géppel rögtön. Sajnos fordítási hibát, valószínűleg előfordulnak az elején. Az ember nem kell elfelejteni, hogy ezek nem mutatnak-megállás hibákat, mint amit fel lehet használni, hogy más fordítók.
A fordítási hibák egyik kap az elején, amikor konvertáló JavaScript projekt a géppel projekt elkerülhetetlen géppel természetét. Géppel ellenőrzi az összes kódot érvényességét és ezért tudnia kell az összes funkció és a változók, amelyek használják. Így típusdefiníciókat kell a helyén mindegyiket másképp fordítási hibák vannak kötve fordul elő. Amint az a fenti fejezetben, mert elég sok minden JavaScript keretrendszer vannak .d.tsfájlok, amelyek könnyen megszerezhető a telepítés DefinitelyTyped csomagok . Lehet azonban az, hogy már használt valamilyen homályos könyvtár, amelyekre nem géppel meghatározások állnak rendelkezésre, vagy hogy már polyfilled néhány JavaScript primitívek. Ebben az esetben meg kell adnia a meghatározások ezen bitek ahhoz, hogy a fordítási hibák a eltűnnek. Csak hozzon létre egy .d.tsfájlt, és tartalmazza azt a tsconfig.json a filestömb, úgy, hogy mindig is a géppel fordító. Ebben kijelentik ezeket a biteket, hogy géppel nem tud a típus any. Miután megszűnt minden hiba akkor fokozatosan bevezetni gépelésre azokat a részeket az Ön igényei szerint.
Néhány munka (újra) konfigurálásával építmények csővezeték is szükség lesz, hogy a géppel építmények gázvezeték. Amint az a fejezet, összeállítása rengeteg jó források odakinn, és azt javasoljuk, hogy keresse meg a vetőmag projektek kombinációját alkalmazzák eszközöket kíván dolgozni.
A legnagyobb akadály a tanulási görbe. Azt javasoljuk, hogy játszani körül egy kis projekt elején. Nézd, hogyan működik, hogyan épül, mely fájlokat használ, hogyan van beállítva, hogyan működik az IDE, hogyan épül fel, milyen eszközöket használ, stb konvertálása egy nagy JavaScript codebase a géppel nagyon megvalósítható, ha tudja, hogy mit csinál, de lehet, hogy bosszantó, ha nem.
Géppel nyílt forráskódú (Apache 2 engedéllyel, lásd GitHub ), és amelyet a Microsoft. Anders Hejlsberg , a vezető építész C # élen jár a projekt. Ez egy nagyon aktív projekt A géppel csapat már kiadott egy csomó új funkciót az elmúlt néhány évben, és sok nagy emberek még mindig tervezik, hogy jöjjön (lásd az ütemterv ).
A 2017 StackOverflow fejlesztő felmérés géppel volt a legnépszerűbb JavaScript transpiler (9. helyen végzett), és harmadik helyezést ért el a legkedveltebb programozási nyelv kategóriában.
Géppel csinál valami hasonlót ahhoz, amit kisebb vagy Sass tesz CSS. Ezek szuper készlet, ami azt jelenti, hogy minden JS kódot írsz érvényes géppel kódot. Plusz akkor a többi nyalánkság, hogy növeli a nyelv, és a transpiled kód érvényes lesz js. Azt is meg a JS verziót szeretné kapott kódot.
Jelenleg géppel egy szuper sor ES2015, így lehet jó választás kezdeni a tanulást az új funkciók és js transpile a szükséges szabvány a projekt.
„ Géppel alapjai ” - egy Pluralsight videó természetesen a Dan Wahlin és John Papa egy igazán jó, jelenleg (március 25, 2016) aktualizálva géppel 1,8, bevezetés a géppel.
Számomra az igazán jó tulajdonságait mellett, a szép lehetőségeit IntelliSense az osztályok , interfészek , modulok , a könnyű végrehajtási AMD, és annak lehetőségét, hogy a Visual Studio géppel debugger meghívás esetén az IE.
Összefoglalva : Ha a rendeltetésszerű használat, írógéppel teheti JavaScript programozási megbízhatóbb és könnyebb. Ez növelheti a hatékonyságot a JavaScript programozó alatt jelentősen teljes SDLC.
ECMA script 5 (ES5), amely az összes böngésző támogatást és előre. ES6 / ES2015 és ES / 2016 idén, sok változtatást, így felugrik ezeket a változásokat van valami a kettő között kell meghozni törődik annyira géppel. • géppel van típusok -> azt jelenti, hogy meg kell határozni az adattípus az egyes ingatlanok és módszerek. Ha tudja, hogy a C #, majd a géppel könnyen érthető. • Nagy előnye géppel van mi identitás típusa kapcsolatos kérdések korai lefekvés előtt termelést. Ez lehetővé teszi a készülék ellenőrzi, hogy nem működik, ha van bármilyen eltérés.