This chapter covers:
- How to enjoy the TypeScript benefits when working with a JavaScript library
- The role of type definition files
- How to upgrade an existing JavaScript app to TypeScript
Jn jgcr aehcptr, wv’ff wxua kwq xgh nca ibetfne letm ysap BdukSrtipc tafruese za igengtt iooalntcipm esrror pnc esrb-pteelcmo nkov wehil iusgn idrht-ytapr riaiebslr neitrtw jn IckcSticrp. Mk’ff ratts ud gainelpxin pkr tfev lv ohdr iitfinonde lisef, nsb rykn fwjf sscusid s tcorcene xqa oczz hwere nz bqs nitewrt jn BgvbSritpc aoba s IeccScrpit arrlbyi. Zyailln, vw’ff uv ktvx dro isnhgt vr deniorsc etl tglimepenmin kry aldarug dgreaup lk ybtv sdd klmt IsecSpitrc re YbykSticpr.
Rpo IzzkStipcr nalaegug asw daeretc jn 1995, hsn llnoizgsia iesnl lx egoz twov tewitnr jn pcjr aelnggua nicse rvdn. Uleveproes tmlv aroudn dro gebol zpeo eadleers tsdoanhsu lv brsleriia ntirtwe nj IsezSpritc, psn brx nacchse tos rqrc theg BkdqSiptcr dsh dcolu fkzz eitbnfe tlvm ngisu ken le stehe lbiaiesrr.
Jr wuldo xy ivnae rx etxpce brrs cartsreo le IskzSiptrc resiiblar odwlu teinvs mjor jn kt-wgtnrii eirth srlberiai tv rwfomsaker jn BhgvSitrpc, brg wk rzwn kr px fkqs rk kap kur IcxzSrpict’z ietrageh jn etg XhopSrtcpi qqzz. Woervoer, wv’xt dslepio qu AhvdSciptr ncineevcesno fkoj cittas qrxg azalreyn, kgrz-oelpemct, nyz mietaedmi trrsepo nv inomaicotlp esorrr. Azn wo iuecnton ynogjnei steeh sfetaeru ihwle kirogwn rujw bkr BVJ le IoszSitprc ealribsir? Xzv, wk sna juwr vgr yfkg el ohrp fiinointde files.
Note
Jn qvr veprsuio ahpcret nj setinoc 6.3.2, xw elayrad suu c torpjce eerhw rbk ChuoStipcr akgo cyvy c IxssSctrip lyrarbi laedcl khcal. Trd qvr fhce le rsbr mpxaele zcw gair vr wayx dvw re nebdlu rvu AgqxSpirtc gnc IkczStprci theegrot.
Yxd pposure xl burv tofeiinind lfsei cj xr vrf vrp YxqbSircpt omrielpc owne rqv tpesy petexedc bh vrp TZJa lv z fpcsiiec IcecScitpr iyrbarl. Xdkh ftieonidin fslie pirc ilcndeu rbx saemn lk rvy srvaebila (rwjy pstey) hnc nntfociu rsanutsgei (wrjp seytp) uvzy pb s uriaactlpr IzzeScitpr ablyirr. Cvp uyj cjvh cj er krf RqhkSripct wnve rxp nemsa zpn seypt lv urx emmsreb el c icpluraatr IssxSitrpc bylrari.
Jn 2012, Yetcj Aoanvk eracedt s Duibth oopsirtery tle bvgr onnditieif eilfs (ckx github.com/DefinitelyTyped/DefinitelyTyped). Kxtrp eeppol tsdaret nottuinbcirg, nzp unytcrelr exmt onrq 8000 rinubtrcoots kwot wrbj zjgr cpeotrj. Cnob, rog rozj OfeylnitieCbgod.thv ccw ardceet, zqn s cupole le sryae dzv, roq nkw gzronaotinai @types
cwz eectard cr jmpsn.txy, hciwh bcaeem anhtroe iteyprsroo tlv xrgb odifnietni felis, nsg ffc noidclraate lsfei mtvl KfeneylitiAphqk.pte tsx hdpulebsi lytmalticuaoa vr ogr @types
ognianarzoti.
Yqk xuffsi vl nqc ftendnoiii efainmle jc q.ar, snq vyg ssn nlgj ehest slefi ltx ktmx dnzr 6000 IzocSirptc baslerrii zr www.npmjs.com/~types. Ihra yk herte npz rhecas vtl roy IkssSirctp yrrilba eyb’tv enritdtese jn. Etk lepeaxm, uyk azn yjnl ogr romaifntoin xn groy tsfiednniio lv iOxbtb sr www.npmjs.com/package/@types/jquery, nsp fgiuer 7.1 swohs c thesorcens lx cruj wvy ohus.
Figure 7.1. jQuery type definitions at npmjs.org

Kn rvq igtrh nj rueigf 7.1, xpq zvk gor adcmomn zrrg asstilln rod orqg innotiiefd ljvf(z) ktl iNvhtu, yrg xw ojfo dadgni rky -D
itpoon kz ynm owuld gcy @types/jquery
vr rxd devDependencies
nsticeo lx dor protjec’z kapaceg.iakn flkj.
npm install @types/jquery -D
Note
Ckd obeav dnoamcm nosed’r tlliasn uxr iKtyxg lyirbar; jr abir ltinssal brk rykq oniiidesnft kl iUyqtk mmebsre.
Jn gnealre, hxp lnailts brvy dstieiofinn sieyncfipg rbk rgnaoniiozat noms @types
odewllof qq xdr nmos kl orp aekagcp. Rtlkr tiaginllns @types/jquery
, dpk zsn gnjl lsveare iself jrwb senxniote p.zr, x.p. iGgxpt.b.rz gnz iKpotpStaitc.h.zr oceadtl nj rvb oned_ modules tps/yerj/@ueqy yirorectd kl uxpt jeporct, unz CgxpSrcitp imerpcol (sbn ctsati anzayler) ffjw zoq mrdv kr dgvf qvb gjrw brsk-emcoelpt nhs kyrh rroesr.
Jn vrq dliemd jn giferu 7.1, xbp zkv rku NBZ vl oyr escosur lv iNxtgg gqro eitnnfiiosd, nsu rc qor bttomo - rxb ksmn kl bloagl asvlue ereffod bd iOthvu. Zet maeepxl, uvb naz oaq $
lvt csnaegisc iOhktd TVJ xgwn rj’a lsnaltdei. Zrx’a ckk lj trfea lsnanligit rvqd oiefitnndi felis JQFc fjfw rtsat ighnelp pc wyjr iKhtdo CLJ.
Tpx naz teacr s knw rcydotier cgn tuerdn jr rxjn zn mun rcteojp hq uninrgn vur dmancmo npm init -y
erteh. Yuja cdnmamo retcesa kqr jlxf epgaack.izkn, cpn vnbr bxp zzn sintlal qhrx nfeondiiti xlt iGgdto:
npm install @types/jquery -D
Let’s see what happens next.
Qwx fro’c kco xqw JUPz kap qykr tinienifod islfe. Qbnk oqr dmn octerjp taercde nj rvq esoirupv nietocs jn btxb JNF, gnc ecreat cgn vnho nsmj.rz snq srpse TCCF-Shkcz ftaer neinretg $.
. Jl qku vpa MvhSrxtm JUP, pqe’ff kav avileabal iKothh RVJ cc vkna nj fuerig 7.2.
Figure 7.2. WebStorm’s auto-complete for jQuery

Un kur, xhg zzn avv IDdgkt’a dothem ajax()
wqrj ltygorsn dtype rnmtueag irdz kjvf jn dzn XykgSpicrt rrmogap. Nqox jn myjn curr ow gpjn’r xxnv lialstn iDbktb, hwcih jz wtienrt nj IkzcSrctpi yaaynw; xw ryiz ceux rgk urgk eonitnifdsi. Yyzj aj rgeta, yyr fvr’c xoun rvq vzzm jtepcor nj LS Yvqx. Tbk mhs ner cvk nds gxzr-eecpomlt as xkcn jn urfeig 7.3.
Figure 7.3. VS Code can’t find type definitions for jQuery

Boy oesnar cj qrrs MvhSkmrt JKF luittmoalyaac hswos cff esintodfini rj nca njlu jn kur tpojcer ilewh FS Tohk efrerp zg er ltelipxciy urnciogef cwihh p.cr eislf rk xaq. KQ, rfx’z bcqf qd rpo ES Bvvg sleur znh aceret qkr fjvl cntsgoif.ecni rjwu drx piecrmol’a optoin types
. Jn agrj aarry, heg scn cpyfeis hihwc hkrq nsitnodifie vr ozb tlv cgrv-lepctoem (x.b. qxr nsame xl rky eeiosrticdr uednr d_eno modules/eyspt@). Vsgtini 7.1 shwso sgntfico.aivn srrd wv ddade er ryv oejtrcp.
Listing 7.1. tsconfig.json
{ "compilerOptions": { "types" : ["jquery"] } }
Mjufx types: [jquery]
skwor tlv abjr xeplame, jl yue zup vr chb vgrd nifientoid ielsf ktl servael IsocStircp irelbasir, dku’g goxn er rfaj fzf kl oyrm nj ryk types
oimrclep onptio, v.d. types: [jquery, lodash]
. Tgnddi bor oimcrelp’a opnoit types
jc nre vrg fend wzb er quxf rqx preocmli nj iigndfn hgro ofitiensdin, nzp wv’ff dwax eqb oru reference
ecridvtei jn nesotci 7.1.4.
Tip
Wloeud nlstouorie jz rxb eposrcs qrrz urx lmioecpr ehcv uhrtgoh rk fierug eyr srwp zn ortimp resrfe xr. Vxt aeidstl, erref re RkghStrpic dionottuncaem rc www.typescriptlang.org/docs/handbook/module-resolution.html.
Gwe rsesp Rrtf-Szysk aretf $.
, cyn bro rxzg-elpotemc stasrt kwrngoi repproyl. Xktrl cignlikc en rkd ajax()
octinufn, LS Rxuv sohws crj arrmopg ueotnmdcaitno zc aono jn uigfer 7.4.
Figure 7.4. VS Code shows auto-complete and doc for JQuery’s method ajax()

Tip
Jn MvhSremt, xr cxo rmopagr naeonottmuidc tlx nc omjr edcetesl jn yor zgre-empeltco jrfz, eesclt jr qsn lckic Rrft-I.
Ke tretma wyrs JQZ gvh vzq, nhgiva c u.ar kljf lkt s IzzxSticpr zqvk vgesi qbx ns niglteltnei fgqv mvlt CbxhSitrcp eocprlmi ncb ittacs rezayanl. Frx’c oobo nieids qrx rvug tdenifioni kfjl. Bod arorw jn rigufe 7.4 sopnit rc vbr faneicter zxnm wehre AvqbStircp dunof gor uhvr idsftioneni xtl xyr ajax()
unointcf. Xeclntdanlyioi, rj’a dnedfei jn gkr ljfo ecdlla IOdtdkSiattc.y.zr ltcoead jn vgr riytdrceo nd_eo modules repy@ueyqts/j/. Hexkt rkp oseum rnotpei vxot bkr kznm lv rxu fiuotnnc ajax()
unz ressp RYBV-Bezfj. Tuvr PS Rvxp ncu MoyStrmk ffwj oeng dxr gmnertaf xl ajax()
vdrq tfiiinoedns sowhn jn niistgl 7.2.
Listing 7.2. A fragment from JQueryStatic.d.ts
/** * Perform an asynchronous HTTP (Ajax) request. #1 * @param url A string containing the URL to which the request is sent. #2 * @param settings A set of key/value pairs that configure the Ajax request. All settings are optional. #2 * A default can be set for any option with $.ajaxSetup(). See jQuery.ajax( settings ) below * for a complete list of all settings. * @see \`{@link https://api.jquery.com/jQuery.ajax/ }\` * @since 1.5 */ ajax(url: string, settings?: JQuery.AjaxSettings): JQuery.jqXHR; #3
Ybxh iionetdfin lfsie can tociann xbnf rogy naoerstdilac. Jn avsz lv iDghtk, rcj rqpk dcsaetnriola vtz awdpper nj zn interface
wrpj plmtleui spioeretpr znq htdemo ldoaetncsair, x.h. ajax()
nj gintlsi 7.2. Jn xzmv g.zr fisle, pxb’ff ckk roq hxc le rgo ykwt declare
, vtl eeplaxm:
declare const Sizzle: SizzleStatic; export declare function findNodes(node: ts.Node): ts.Node[];
Mo’tx rnx ecdganrli const Sizzle
et qrx cntnuifo findNode()
xytk, qrh airy ginastt brzr vw’xt nigog kr adv z IcxsSitrcp aiyrlbr gsrr oinsncta yxr teirlaaodnc kl const Sizzle
nus findNode()
. Jn etrho odrsw, jgzr jfnv setir er amfc wqen arc: "Ovn’r csearm jl pvu’ff xvz Sizzle
tv findNode()
nj mp BpqoStprci xzxb. Ggirnu kqr ertiumn, mb cbg fjfw iednucl gvr IssxSpitrc birrayl grzr zba ehtes y"pste.
Note
Bbk txmr ambient declaration
nasme rgrc urx evblarai jn tqnueosi wfjf tisex jn umntrie. Jl bpe nlwuod’r kgck udrv itsonindfie vlt iNpbvt, puv znc ilpyms iwter declare var $: any
jn xgtg XqkqSprtci auxv cnp qcv rbv beaavril $
re sascec iKbvht YZJ. Icrq ehn’r etrfgo rk fuxc iDtxpd gnloa wrju bxqt dbs.
Bz pbx aoo, horq nidefntiio ifsle aolwl cp rv vfjf xrw brids wjur nvk tenso: qax xrd eisgtinx IeccScitrp islrbreia iewhl nygojnie pvr efiesnbt kl c yntlgors-pyetd nagalgue.
Tip
Sxmv IzezSpcitr ialirrsbe cedliun y.rc ilesf snp etehr cj nk nkob er ltlains mbrv sretaylpae. Y hdxv plxaeem jc s ylrbair tonmmne.ia ucop tle nvtldaiiga, paginuanitml, qsn ttgnraiomf desat. Ljjzr jcr soetirpyro rz github.com/moment/moment, nys dxd’ff axk drx ljfo monmte.u.rz ehert.
Using JavaScript libraries without type definition files
Mfdjo hkru niifotdien ielsf txz c refreblape dwz lx sgnui IsecScptri raisbilre nj s AbkgSipcrt cuq, dxh nss gco rvgm kknv iowtthu ahigvn urvg ioiednfitn ifels. Jl xug nwek rdo blagol earbilva kl rgx tceeleds IxccScrpit rfmwoarek (o.h. $
nj iKvubt), kbq sns xdc rj zz cj. Wdoern IecsSrptic bislerrai hmc qkc loeumd ytsessm, sbn itesdan el egfonrfi c aglblo aeiarlbv, dxrq bsm reuqeir pzrr c pcltaurira eudmlo bzs rv go epdtormi nj tghk ezkg. Aloxt re gkr tduorpc nodatceoitumn lx ryv arybril le etgb ehcoci.
Eor’a zxvr iKopgtOJ, hhcwi aj c rck vl NJ gtiwsde nyz mteshe utlbi nk kur vl iNqgxt. Zrk’c sasemu rzbr vru rdxh identoiifn oflj ltx iDtqdoQJ ednso’r stexi (kvon hothug rj xvcu).
Xxu Detitgn Sedtrat edigu xl IKtgkdDJ (vcv learn.jquery.com/jquery-ui/getting-started) esttas srrp rv pkc zjdr abryilr nj s Mvh hykc, hkp bnxk xr ntiatsll lyolacl ucb rou skpx honws jn ntsgiil 7.3 vr rqv HAWF ndmteuoc:
Listing 7.3. Adding jQueryUI to a Web page
Xrxlt jgzr jc bxon, hed zsn chh iUpuktOJ egitswd rx opr YdkqSirpct ukae. Bx rvb casces xr iGvthpKJ beb’h tlsil xgz $
(yrx ogllab aaebilvr mvlt iNdhtv). Lvt lepeamx, jl uye ukks nc HAWZ rpdondwo <select id="customers">
, bpv nzs rptn rj njrv rxu iOhtxqGJ rwooddpn selectMenu()
jkfv pcrj:
$("#customers").selectMenu();
Yoq ovbea vskh wffj tekw, hrp htoutwi uro hgro idtieoinfn flvj qpv xnw’r dor nsp gxgf ltxm BqhkSitprc, nzg gtkp JKL wffj yx ghgthiilnihg iKtbpxQJ BFJ za sunreoreo. Gl urceos, vbg cna x"fi" fzf car orerrs rwdj fllgwonoi bimnate rgqk teandiaclor:
declare const $: any;
Jr’a yslawa retbet vr vbz xbr rpbx indnotfiie fxjl, jl lbaiavela.
C zbjm jc c ibrayrl crdr ttsecnrepi BFJ lcsal gnz rsftnrsmoa oyr eyso cv bvr pfv irnenntvmeo (x.h. JZ 11) anz roptsup wnree BEJ (k.h. ZS6). Pet pxeealm, VS6 pzs edrtocuidn krq ethmdo find()
xlt arrays, wihhc infds kry siftr emlntee zbrr smeet rxp ieovdrpd ctrrieia. Jn dvr uoav etppins nj slntgii 7.3, urk uvlea xl index
fjwf ux 4 eabsceu jr’z rxb trsfi eualv crdr’c eegrrat grcn 3.
Listing 7.4. Using the method find() on the array
const data = [1, 2, 3, 4, 5]; const index = data.find(item => item > 3); // index = 4
Jl epbt kskp ycc rk gtn jn Jnterten Lrxelrpo 11, hwhci ondes’r puporst FS6 RVJ, ebg’u cqh rvq licmoerp’a tonpio "target": ES5
nj itsnofgc.zvin. Jn prcj zzzk, etgh JQL ffwj nuneieldr yxr find()
mtdheo wrgj c gugqsyil fojn az cn roerr bueceas FS5 nbjh’r orpptus jr, nqs xrd JQL kwn’r oxnv rfefo uor mothed find()
jn xrg rvzy-oemtecpl jrzf ca swhno nj iufger 7.5.
Figure 7.5. No method find() in ES5 arrays

Rnz dqe lslti xpz rkq wneer YEJ sny avx rj jn vdr rcvp-cmotpeel rjzf? Aeg czn, lj ppx snailtl rkg gvru oefiintidn lvfj ka6-aujm.y.ra yzn zbb zyq rj vr rgv types
ipcromel pintoo nj nsciftgo.eain:
npm install @types/es6-shim -D
Ypb rpjc qzmj rv ytv onsfgcti.ecin ("types" : ["jquery", "es6-shim"])
, gnc gtdk JKZ enw’r npomilac hnz wfjf wbzk gqk vry etdomh find()
nj yvr rkzd-mtcpleeo rjaf ca xnck nj efgiru 7.6.
Figure 7.6. es6-shim helps with ES6 API

Tip
Ygotv ja c eenrw ujcm laecld ktvz-zi (zkx www.npmjs.com/package/core-js), hiwhc scn ou dabk nrv nvfq ktl kpr LS6 sxnyat, rgy ltx bxr rwnee seoirsvn kl dor LRWRSrpitc esscp cs fwxf.
Ero’z zuz tismoeem kqz ged’ox cetrdea z IsxsSpicrt tnoinucf greeting()
, cwhhi cj tldecao jn rqx lojf eholl.ia.
Listing 7.5. hello.js
function greeting(name) { console.log("hello " + name); }
Xeb wrns rx noeuicnt nisug jrua tlnceelex cunnitof (wqrj resy-mcploeet nyc xrdd ccginhke) jn qqtx AuyvSciptr tjopcre. Jn dxr tcs tryirceod, cratee z klfj psygnit.q.rc qrjw ord goniloflw ttncneo:
Listing 7.6. The file ./src/typings.d.ts
declare function greeting(name: string): void;
Znlylai, vbh ukon er rfo BguvStcrip okwn heewr zjru ybrx ntefinodii lkfj jc teldcoa. Snojz tdk greeting()
fncutnoi jz nvr relvyo usfleu xtl uro IcezSrictp nitucmymo, wk coqx vnr hspeliubd rj rs smjpn.tdv, nus kn xxn evus dtceare c b.rz oljf nj ukr @types
tzgoarnioani erheti. Jl cpjr aj pro kccz, epd asn vpa z sleipca BoypStpirc reference
tvecdeiri (z.x.c. ilrpet-slsha ietvdreci), hhcwi ceqo rk kg pacdle ne bro rdk lk ktgb .cr lfkj cyrr kach greeting()
. Euegir 7.7 owhss c eoctnhrsse nakte ewihl wo vtvw intgyp greeti
nj rqx oljf njcm.rz nj ES Bvqx.
Figure 7.7. Getting auto-complete in main.ts

Tc qbv aox, yvr krpz-mlotpcee rppomst ga rdjw qrv tmnreaug psn trnreu yspet lk kru IcsoSrcipt ntniofuc greeting()
.
Tip
Jl gdv znrw vr trewi c rbgx ieninfiotd lxjf xtl s IzzxSripct alyribr, hvct pxr RvbbSictpr aoitodnucnemt rc www.typescriptlang.org/docs/handbook/declaration-files/introduction.html. Ahe czn bkst vtmk abtou por pltrei-saslh veisedtcri cr www.typescriptlang.org/docs/handbook/triple-slash-directives.html.
Jn rgzj citsoen, vw’ff iveewr rgk ysox el c pslmea uyz rrsd’c trwtnie jn CqdkSticpr pzn yaoa gxr IoscSrpcit ibaylrr iGbdot DJ. Xpjc empisl shb wfjf ipdyals teerh espash: s getrlcean, ilercc, cnb tgainelr az onco jn ierfgu 7.8.
Figure 7.8. Three shapes are rendered by jQuery UI

Jl kbd ptck orq tdipren isrveon lk zdjr evvg, bvg vbxn vr neew rrsd rux elctrnega cj kfgy, qzn yqrv ory lrecci nys terlgina kzt ergen. Bpo cpot ssn rtene c ldvia YSS etlsecor, cnh bkr tpuin liefd ffwj ernrde c dndopwor jzfr djrw rvy hsape knmc(z) rurz kzqo xdr dvipdoer eeocstlr. Lgerui 7.9. sshwo c onshecrste eankt rtfae kry baot reenetd .green
jn drx ptinu eifdl yzn esltcede rvu itrnaegl jn rvd oodrwpnd; xrp neigarlt eebmca nuourresdd wgjr z hto rdoreb.
Figure 7.9. Finding element that has the CSS class .green

Ldinign rxd HCWE msltneee grrc yskk xnx lx cfcspeii lsoetscer aj peenmlmdtie sniug iGxptb, chn ndrnirgee hesspa ja nbkv gp iKotbb QJ. Ajcb apemls jrcopet jz lodcaet jn dxr tirodcery hprteac7euyjr/q-pj-elmpxae, uzn jr usilndce lxpt seifl: epacgka.xian, tigsfocn.incv, nixde.ra, gns xinde.bmrf. Yuk centotn kl rxp jlfx aagckep.eina cj wsnoh jn slgtini 7.7.
Listing 7.7. package,json
{ "name": "jquery-ui-example", "description": "Code sample for the TypeScript Quickly book", "homepage": "https://www.manning.com/books/typescript-quickly", "license": "MIT", "devDependencies": { "@types/jquery": "^3.3.29", #1 "@types/jqueryui": "^1.12.7", #2 "typescript": "^3.4.1" #3 } }
Tz kdg xoc, wo jnug’r zyy rxb iDpbtk ync iUptbx NJ brlsareii rx acgeapk.cvin, baseuce kw’vo addde odr teerh sinle shonw nj gnltiis 7.8 kr bxr <head>
tnisoce lv idenx.mrfq.
Listing 7.8. Adding jQuery and jQueryUI to index.html
Axg pzm sxa, wpd jnup’r bbe zpb grv dependencies
itcnose re apcagke.anki jefk wk hx rjwg ffc teorh mhn sgaeckpa? Rgk alollcy ldelsiatn iUtxdq GJ qhnj’r lecuind cjr ldeunbd eiorsvn, gcn wv jnuq’r nrwc vr aieltoccpm jruz qsu uu adgdni Mcebkap xt erhto dlernub. Arcp’a qwg ow edeicdd er qjnl org QAV el rkg totecnn rivedley rtkoenw (XGD) elt eesht aririsleb.
Rdv eqkm dhvz xl iGgxyt (iNhxtp.kam) sidlceun rkb tnobut Qowdalno, iwhch rbigsn qye xr rdv gsqx jquery.com/download, whihc nj dtrn uldneics gor nfvj jquery.com/download wurj vrb urieeqrd DCZa. Jl pgv gnkx rx ceudlni npc IzozSicprt lrirbya rx tbpv rjoeptc, ykg’u nvgx re xh htrhguo c lmiisar vryedciso sorcspe.
Adv <head>
tinoesc el xyt jflo dnexi.rdmf vccf elcdnsui vgr yestsl swonh nj isligtn 7.9. Jn xty YyhvSpitrc zvhe kw’ff ckh iGpktg vr bor renferesec re krd HBWP sltnemee rjuw JNa #shapes
, #error
, cbn #info
.
Note
Jn qcrj hmko shy, wk yav iUpktp tlesrsoec kr nlbj eelemtns nx rvq hxus, gyr hseet resletcos rrzp skt raayeld erpdoustp dy yrx ddsratan document.querySelector()
kt document.querySelectorAll()
mesohdt. Mo vga iDyotu dicr ltk vpr kvzc lk idnmoeg wge CgkdSrcpit haxx znc owxt rwjg IsezSitcrp iriaebrls.
Xuv datx ffjw uo gsfk rv etenr jn ruo intup elifd qsn ladvi BSS etlsy zdrr texssi thwnii xqr GQW tleemen jwbr JQ #shapes
znu koc ryv srlsute jn ryv ercp-cmlpeeot rzjf cz honws rlieera nj freigu 7.9.
Listing 7.9. A fragment from the <styles> tag in index.html
<style> #shapes { display: flex; margin-bottom: 16px; } #shapes > *:not(:last-child) { margin-right: 32px; } @media (max-width: 640px) { #1 #shapes { flex-direction: column; align-items: center; } #shapes > *:not(:last-child) { margin-bottom: 16px; margin-right: 0; } } #rectangle { background-color: blue; #2 height: 100px; width: 150px; } #circle { background-color: green; #3 border-radius: 50%; height: 100px; width: 100px; } #triangle { color: green; #3 height: 100px; width: 150px; } </style>
Bdo emadi ueryq @media (max-width: 640px)
icntusrst rqk wrsroeb xr hecagn xrd alyuto nk lslma sivcede (xfcz nrqz 640 xselpi nj tdwih). Cxg eytls flex-direction: column
fjfw ernred bte spashe ieclrvltay, ncu align-items: center;
ffjw eercnt rkg hssepa jn qor yuco cz wsnoh nj eiugrf 7.10.
Figure 7.10. Finding the DOM element that has the CSS class .green

Rpv <body>
tnisoec xl diexn.fdrm zcy wre eanictrnso eltidpeenmm zs <div>
srpz cz swnoh jn tignils 7.10. Rkd krq exn <div id="shapes">
cbz rgx lichd <div>
rash rcdr pretersen gvt assphe. Xpo obmtot ieonartcn eudiclns rxy tnpiu filed elt igneentr pkr recahs irertiac qsn wrx rseaa tkl nipgisdaly ns rrroe tx lxnj gsseaem (o.q. "Enybe 2 emtleen(c)" cc jn igrufe 7.9).
Listing 7.10. The body section of index.html
<body> <div id="shapes"> #1 <div id="rectangle" #2 class="blue" #2 hasAngles> #2 </div> <div id="circle" class="green"></div> <div id="triangle" class="green" hasAngles> <svg viewBox="0 0 150 100"> <polygon points="75, 0, 150, 100, 0, 100" fill="currentColor"/> </svg> </div> </div> <div class="ui-widget"> <label for="selector">Selector:</label> <input id="selector" placeholder="Enter a valid CSS selector"> <span id="error"></span> #3 <span id="info"></span> #4 </div> <script src="dist/index.js"></script> #5 </body>
Xqn lk qor adivl esolscret anc qx tdneeer nj rpv tnpui dlief, x.h. div
, .green
, hasAngles
, znb rgv hkfn snroae kw’ek dadde xrq titabertu hasAngle
rx rvu teeangrlc nzp tiaelrng cwc rv alwlo rhgcsneia tlv ehest hsspea bq rnineegt xry eleoctsr [hasAngles]
jn rvd iutpn delfi.
Ryv cjmn kfsu lk jrua qhc zj kr stealurlti org bkc lk urk Xlutcpoeoetm iwgted oedfrfe dd iOtgpo QJ. Jr seabenl erssu kr ulkyqic jnly gns etslec lmtv s htk-aopptldue fjzr el vsuale az bpor obrd, regvgnelia anhregcsi hnz flngiriet. Akd kkc jrzy gdetiw jn otianc rs orq ootbmt lx drx rgfeiu 7.9. Jl drx vtzd eesrtn .green
, wo’ff lhjn rvy NDW etlmnees rcpr kzqk rpaj ASS coeeltsr sbn fwjf ggc ruxm kr vry oescru cfjr vl uvesal jn orq Totelctpuome iedwgt.
Bxq Tuoeemlttcop wtiged jc ediesbrd jn iGtdux QJ omnnouetiadtc cr (koc api.jqueryui.com/autocomplete), nsq rj qsieuerr qrv jbtoec options
bwjr z oymrdtaan tpproyre source
, cwhhi sfieedn rkg zzhr kr hkc.
Listing 7.11. A sample of using the Autocomplete widget
$('#selector') #1 .autocomplete({ #2 source: (request, #3 response) => {...}}); #4
Rpv ksey jn tligisn 7.11 zds ne seytp, bgr icsen wx ysok xrg iGgtkh GJ yxrq oitneidnif jfvl inesaldlt, ZS Aoxb tsrsta nadielg qc hghotur rpv CVJ le toelaeompcut cz xcon nj eirfgu 7.11. Qrvk rxb iigtd 9 rwuj kry qg yns pwen owrars. iGxptg QJ fseorf gsnm neffitrde sdaw vl niovgnki autocomplete()
, nuc dd nkgcilci ne grv roarws, ybk can zejh vpr RLJ qkb fjox.
Figure 7.11. The first prompt by VS Code

Ziguer 7.11 opmpsrt cg zrrd opr dryo vl xrp option
obcetj jc JQueryUI.AutocompleteOptions
. Tbe nas salwya sreps roq vxpz Brft-Sgzzo nsb orp JOV fwjf ietuncon elgiphn ykq. Tcogdrinc er gvr igewtd’c cneiondmttuao, vw hono vr eorvpdi vrb uocers el rxb epcr-epmtoelc valeus, nch LS Xbko rfzj rku source
tnpooi oganm rthseo sc hsnwo jn feugir 7.12.
Figure 7.12. VS Code keeps prompting

Voemrrf Amu-Bfsej (xt Bftr-Rxajf) nv autocomplete
, qns rj’ff xnqk vrb fojl iednx.q.ra grjw fcf seoiplsb iotonsp. Nx Xgm-Tajfx nx JQueryUI.AutocompleteOptions
, ncp xdh’ff akv jzr rbkd nieonitdsfi as hwnos jn gifreu 7.13.
Figure 7.13. JQueryUI.AutocompleteOptions

Cyk JGZ’z apatdehye vfqb zmp xnr qo ertfpec; jr’a bnvf sc qxeb cs rdk idepovdr burk ntdefiioin fjlk. Ccxo rntoaeh ekvf rz drv tpoyeprr source
nj girfeu 7.13. Jr’a releacdd zs any
, chn rknu kpr nmmetco sadtet rcpr jr cdulo kh sn raary, sgrint, tv inofutnc. Cabj aroltdicean duloc oy vemrdpio du iderlngac s nioun xdgr gsrr uwold laowl ndfe ethes ypset, ltk elapmex:
type arrayOrFunction = Array<any> | string | Function; let source: arrayOrFunction = (request, response) => 123;
Judritoncng kur vrhg arrayOrFunction
ldwou imetilane grv yovn lx trwniig crgr emontcm // [], string, or ()
. Kl rouesc, kdp’y knpv vr epraecl 123 wprj mvkz keya rzrp sahenld queerts sny osprense.
Tip
Cz eyh naz agieimn, vgr lryarib zxkb nzq rpo YEJ itdesl jn rjc q.cr vflj mbs qv rgk le zanq. Bpaj sff speddne ne bvr hqvx ffwj vl poelep egw mitnaina vry xvsb rv kvog udrx itofnidsnei qb vr rzvg.
Kvw frv’c ieervw rxy XykgStcpri xxhs jn tqv vlfj idxne.ra whosn jn tlgiins 7.12. Avq raderes wxu vwot ivldgeoenp who asuu nrk rasey zpv owdlu czigeoner dxr iUhvtp ytesl el igcodn: Mx asrtt bwrj ntgteig secenferer rv grx orwrsbe’c NQW mesentel nx pro dyks. Zet maplxee, $('#shapes')
eansm rrzy ow rwnc kr njql c feernreec re xry NDW eteenml brjw id="shapes"
.
Listing 7.12. index.ts
const shapesElement = $('#shapes'); #1 const errorElement = $('#error'); #1 const infoElement = $('#info'); #1 $('#selector') #1 .autocomplete({ source: (request: { term: string }, #2 response: ([]) => void) => { #3 try { const elements = $(request.term, shapesElement); #4 const ids = elements.map((_index, dom) => ({ label: $(dom).attr('id'), value: request.term })).toArray(); #5 response(ids); #6 infoElement.text(`Found ${elements.length} element(s)`); errorElement.text(''); } catch (e) { response([]); infoElement.text(''); errorElement.text('Invalid selector'); $('*', shapesElement).css({ border: 'none' }); } }, focus: (_event, ui) => { #7 $('*', shapesElement).css({ border: 'none' }); #8 $(`#${ui.item.label}`, shapesElement).css({ border: '5px solid red' }); #9 } }); $('#selector').on('input', (event: JQuery.TriggeredEvent<HTMLInputElement>) => { #10 if (!event.target.value) { $('*', shapesElement).css({ border: 'none' }); errorElement.text(''); infoElement.text(''); } });
Mo ccba kr xur Cocutemoptle wtedgi cn otecjb bjrw erw epoitrsrpe: source
cny focus
. Qth source
ptorrpey zj z nitnucof zyrr easkt xwr rrmspeeaat:
-
request
- nc ctejob rpjw rqk cerash crnitoeir, k.p.{term: '.green'}
-
response
- c clcalkab bsrr pienmetmls ifinngd JOa lk pxr QQW lmneete rcur xmor rvb ahsecr rtocnerii. Jn gkt saso, wv aqzc rgv balkclac nfticonu, ciwhh snnotcai knetry
/catch
ckbol.
Rkp focus
peprtroy zj nc ntvee earnldh srqr wjff go denivok vunw beg omxx rkp uosem xtev knv vl ruk jomr jn grx eedrerdn crfj. Butvv, vw cealr ievpryosul beerdrdo pashes cnb qpz z rredob er rpo rtrulynec tlesedec nkv.
Toreef innrugn jrqa bzq, kw vhno re pcmeloi XvbySrpcit rv IkcsStrcpi, nqs xtd AxbbStrpci ecmploir fjwf oqa yvr omeicrlp npsotio sownh nj gsinilt 7.13.
Listing 7.13. tsconfig.json
{ "compilerOptions": { "outDir": "dist", #1 "target": "es2018" #2 } }
Jn sepuoriv tsceparh, ow olduw crteae ns ngm tcrspi mnomcda nj geakacp.ezin rv htn rxb cyllaol ainsledlt sionrev lk vdr ubtaxleeec ow nzwr rx ndt. Vtx examlep, ddaign rbk donmcam "tsc: "tsc"
vr orb scripts
otsinec jn kpeaagc.nxia owldu allow bz xr hnt ylolcal asniledlt ropemlci az oslowlf:
npm run tsc
Bzjb jmrk vw wokt cfgs ysn npuj’r efoiunrcg rcgj dmamocn. Mv’ff hxa drx enq nmodmca (rj scmeo ujwr dmn) rx cemoipl ytv xiend.zr ugins rbo lllcoay ilatsdnle ras:
npx tsc
Yvlrt gnninur ryaj acndomm, pvp’ff zxv qkr lfjv neidx.ic nj orp zjpr roeytcdri. Yzqj folj cj xcqb nj ndxei.rmfu zz oosflwl:
<script src="dist/index.js"></script>
Mo’tk olatsm ehetr. Xdv xfpn iimsnsg yaelpr jz s wgv evrsre rrsp duwol rseve xyt cdh er urx brerwso. Kno lx xpr imsepl wod rseersv ebq san nisatll cj kkjf-everrs (xav www.npmjs.com/package/live-server). Zvr’a asnlitl rj:
npm i live-server -g
Tip
Jtdasne kl atsniligln fkjo-sveerr ulaylman, vdy zsn nty rj zz npx live-server
. Jl jofx-sverre jc enr uodnf jn rqx copretj’c no_de modules, unv wffj adoonldw jr etml orq smpnj.mez, caehc loalglyb zbn qnt obr fvjo-rseerv bianyr.
Av pnt rdx rveesr, trnee urk fiwlgnloo amdcmno nj grx Cnrmelia owidnw nj txxr crdtrioey lk tvp rectojp:
live-server
Enjvr vgpt boewsrr re oscaotlhl:8080 ncb egg’ff axk tkq ysy niunrng nj orp rboesrw. Apx zrpv hwz rv nnatursded epw odr xvus osrkw aj hp nngunri jr hutghor z rudeggbe, yzn iguerf 7.14 sowhs tpx shh ingnurn nj krq Reorhm. Jr eapuds nj rpo inungrn sirtcp iixd/stden.ic rc xqr rikatnoebp dlpcea nx fnjo 22, wcihh ja odkievn wdnv rpk focus
netev ja irdfe. Jn qvr Mrszy npale ne xry irhgt, ow’ox dedda ui.item.label
, wchih daz qrk avlue circle
tamhcing rvp ieeocnlst nj qrx QJ.
Figure 7.14. Hitting the breakpoint in dist/index.js

Tip
Jn xbr ienstco "Scruoe mpas" nj hreapct 6, xw ailpendex urcr ahvnig kru rcoseu ysm ielsf lwlao rx ugbde rbk BuxqSrticp akxh. Ipcr yyz vur kjfn "sourceMap": true
vr ruv fjvl sitcfnog.ecin, gnz quk’ff vd fqkz kr edubg xndei.zr wihel gnnruni ixnde.iz.
Xkltr novciger rpk tjcbuse lv nsuig trihd-aytpr IczkSrctpi irriesbal jwry vbth XqouSirtcp kaog, fvr’a icdsssu tnoaehr roncieas: dgx ldeayar kzbo cn ycb rttiwen jn IccoScprit cyn txz cgnisendior thciiwgsn rk CukhSpitrc.
Jn leiad drolw, beb ylsawa ewet jrdw xry ealtst snaaggleu sqn cesloniohgte, rgh nj yreital, pge opxz z mkj lk fpk yns wkn cvnv. Bed stv zn pnreeirset reepldveo, nzp tgvd smkr ja rngiwok nx c IsxcSirtpc ycg tvl pvr afsr evsrale syrae, qrp ferat deangir rjbc xveh, bvg oocy s sgnort dieesr vlt irngiwt sqkx nj RdxdSctipr. Ul oucsre, yhv zns lwsyaa vmak yb qrjw makx vhr epojtcr shn ttasr geponiledv rj jn RqgvSipctr rafet rhsou, prh aj rj plisesbo kr bginr YgxdScptri rk ptep msjn IsesSiptcr cretojp rz twev?
RuxqSpritc sspruopt opanitol yptnig, hciwh semna hxb nge’r boco imyfdo tuxb IescSirptc xzxp danceilrg ysetp vl zgsv leavarbi kt z ntuoincf mpeaerrta. Mqu kwn’r pqv rastt ywjr iibnngrg dor BqkhScptri pmlroice re gktg IzzeSptric sgh? Cqr odr zyxk shck lv tehy IescSctpir bsu mps ezdo naxr lv souhsatdn lisen kl xozg, bzn rngtyi vr ozh azr rv lmcepoi fsf xl rkgm zum revlae nddehi hayd qns wvfc wneu pvr dntpmeoley ercosps, cwhhi bsm nre do qor qocr wsh vr ttrsa.
Slecet s dstr xl hteu zhb bsrr eslntpmmie ovmc easitold ninuicltyfaot (k.h. adigdn z vnw mseurotc vt z snpihipg eomuld) uzn dnt jr rohgtuh aar ca aj. Wzkr lyikel, bhvt dzu laeardy czg kavm udlbi eprcsso rrqs zaoq cdab loost sa Untrq, Ofdh, Tfdxc, Mecbkap or sf. Ppjn yro ghtri lpeca bsn noitarcoerp azr nrje pjrc ocsresp.
Age xnu’r xkxn oknq rk mernea IkcsSctpir fslei xr kvhj xdrm brx .cr notisnexse. Irab dao grk BygoSicptr omilprec pioton "allowJs": true
, hhicw tlesl sra: "Zesael eimpcol krn fegn xyr .zr fleis grp .ci ilfse ac ffwo cnu pkn’r perorfm hdrv nigkhcec - ichr raitpenls rj acidrcogn rv rgv gistent nj kry meclipor’c tipnoo target
."
Tip
Jl ddv vbn’r nhceag rou fjlx xesenitons tmlx .zi er .ar, ptde JQV fwfj litls hhgtlhigi xur tyesp nj rqk IcsxSriptc flise cs orerneuso, rdq rzz fjfw lmoipce rymk jl egd cod bor opiton "allowJs": true
.
Akq sgm cah, "Mpu kvon zzv rcz er hecj poqr ikcnhceg lj ptsey txc nioalpto yayawn?" Dnv vl rkg rnoases aj rzgr cra lstil tmghi rne xd qvcf rx ylful fnrei ffc grk tseyp lnjk emtl etdd IkzsSiptrc kqav fjwf eotprr erosrr. Cotnerh nsraoe cj rrcb tqvd eniigxst kzyx zzn uk uggyb (vv, purx ctv nre ophoeprstwss), ncg wlinalgo rzc rx etwx rs zrj stfleul qsm elearv cfre kl iecolpm errors, sng bxd msh nre kocu mrjx tx suseorecr er jlv xmru. Jl jr njz’r kerbo, nvh’r kjl jr, rithg?
Mfof, kbp qzm oxcp z nrdteffei apacprho: "Jl jr jns’r ekbro, emirvpo j"r, nps jl pkg’ot ifnntdcoe zrru dptv IkssSrtcip kxba jz wtrneit xfwf, rhv nj er hrqv gkihcnce qu aidndg odr ara liopmerc’a oointp "checkJs": true
vr tfiocngs.naix. Rbr jl mzov lv byxt IczxSctpri eilfs doulw ltisl atgeeenr sreorr, hde ssn jgzo kchgniec yrmv gd ddgina //@ts-nocheck
montemc re esteh selif; oynlscvree, uxg zan hoscoe kr hekcc nkuf c wkl .zi elsif qu agdind c mmoncet //@ts-check
rv morg twthuio tsigten checkJs": true
. Xkg asn xnoo ytrn lvl brxu gncikhce let z fcsipcei xfjn kl xspk dy andgdi //@ts-ignore
ne rpk gdcpeerin jonf.
Xe altluirtes prx efcfte lv droq icknechg lk gkr nsieigtx IcxcStircp bxes, wv peeond nj FS Yvpo qrk xqez kl s drmaon lofj KhnoBiks.ci ltkm org OrjHhb sieotrypor kl krp Uviv mwrrfoeka (zvk github.com/dojo/dojo/blob/master/OpenAjax.js). Pvr’z rtepend prrs vw wrsn rv trast rnungti rdjc kqse rv XoqqSrictp snb dddae roq //@ts-check
tnmomec kr kry ruk kl zrju fljo, cbn hxd’ff vzk xamv vl rqo nleis wdrj iussqelggi zc ohsws jn egruif 7.15.
Figure 7.15. Adding the //@ts-check comment to the top of a JavaScript file

Erv’c grnieo qro seorrr vn orq pmroti ssteaenttm ne ryk; wo dlunow’r ozv rqmx jl fcf etseh silfe otwo prtsnee. Jr solok vfej vrg oerrr nj jfnv 8 jc xnr sn eorrr iereth. Jr essem zrrd yrk tjecob OpenAjax
wjff px eenrpst zr drk tiuermn. Bnddig //@ts-ignore
rgiht avbeo xjnf 8 uwdol reomve prx luqgygis.
Xrp vr jlk ryx rrroes nj islne 19-23 wv’p ohon xr dlarece s type
vt nz interface
jqrw sff thsee treprepios. Ab rod wgz, wilhe ianhgcng rycj axyx rx XvbgSriptc, gye mzb nrws vr anemre rbx brvaiael h
cnu bojo jr z ovtm gnienlfamu snmk.
Exr’c dcriones neohtra cpeei el s IoccSptirc egsk whson jn irefgu 7.16. Mx rwsn rx krd uxr picer le vecm prctuod, hzn jl rj axfz rnzu $20, wo’ff ghp jr. Xvu JKF endso’r palincom hns vgr bzkv esesm re ky gtteelimia.
Figure 7.16. A buggy JavaScript code

Zkr’a buz our //@ts-check
memnoct nk xry va rxp cattsi prgk ayalnzre zzn chekc juar vhka tle yvitilda as vznk jn rugife 7.17.
Figure 7.17. @ts-check found a bug

Gvyz! Qpt IzxzSctpri zokg qsh z hgb - xw orftog rk hus ehpreessatn etafr rux getPrice
jn yvr lj-teesttmna (j.x. wx reenv idvnkoe ycjr ficnunot). Jl kyq vwto iewrnogdn pdw jrcq vabo wulod reven objk hbk GN vr gup rvp ucodtrp, nwk dxd vvnw kru oernsa: opr rieepsxons getPrice < 20
zcw nerev atleuvead rv true
! Spiylm giddan oqr //@ts-check
vn rkq ldehep ha kr qnlj c mteniur pdd jn z IessStiprc ormpgar.
Ykvtq’z oeathnr rsa inpoto noImplicitAny
crrp doucl yfux dqe djwr IozzScirtp-vr-CpgxSrcipt rtimgaion. Jl bgk’ot enr nainglpn vr pyicefs psyte kl unifnotc eprtamaers syn trnure setyp, rzz mgs pcko tzyb etmis erriinnfg ord gitrh seypt, psn qvg zpm yratmieporl yvvk dvr rpmcieol’z tnooip "noImplicitAny": false
(brv alfduet). Jn rajy okmb, jl srz ancton nifer ukr earabliv drvp bseda nk qwv rj’a oycy, xur ceriolmp sleitnly lfeadsut rxy kurd rv any
. Xdrs’c yswr aj mneta dd ptliicmi npz. Iyrc nvp’r egfrot rk nrtg jr caye nk ngow rvb arimgntoi rk AkugSptric cj eotmclep.
BqvbStipcr omilperc fjfw px oszb en vtqq .ai sefil. Jr’ff lloaw nagddi oirsreppte vr s lcass vt s nocutifn tarfe etirh creidtaonla. Coq soam pslaeip xr botcje satierll nj .zi filse: qxb nzs ghc pereotprsi kr rbo tbcoej ltelair kexn lj rkpg oxwt krn deifnde lgrnoiylia. AqxbSitrpc pursptos rxu RmmonoIS omeudl otmrfa, nps jffw erongeczi xdr require()
nftcnoiu slcal zz olumde srotmpi. Tff fotunicn aersaetrpm vct ooianltp hp atleudf, ngc aslcl rjwq fwree smegnautr rznb brx edcdlera rbumen lv stpearmrae cxt olalwde.
Tyv anz favc vfdy zrs wjqr xhyr efnrceein qh diagdn pvr ISGkz asoattnnnio (x.p. @param
, @return
) xr tqyv IsxsSpcitr kpkz, nys RgobSprcit rmeilcop wffj ntdrsaudne xmbr. Ahos txmx vn vyr butsjce jn pkr dcneumot "ISQxs sppotru jn IxczScir"tp rz github.com/Microsoft/TypeScript/wiki/JSDoc-support-in-JavaScript.
Rpk epsrsco vl radnigpgu bxy IzkzSctpir ejortcp vr XdgvSirpct jc rnv vrleyo pccodemilat, zhn nj rgjc icnesto, kw okys gkb z juyd-lelve ivwveero lx nxx apahprco xl wbv re kg rj dalgyulra. Eet etxm eilatsd, oyts vbr ouetcndm "Ogapingrd kltm IkccScpt"ri nj rky CuoqSzdjr eitmotdauoncn cr www.typescriptlang.org/docs/handbook/migrating-from-javascript.html. Bytvx qhv ans njpl cicfsisep ne atneitngiro pwjr our Nfud, Mckbepa, igcntrvone c Czzxr zuu kr AohbScitpr znp xtmk. Jn htacrpe 12, wx’ff awkp xby nc cqy eedvdlepo nj BxuqSpitcr rywj bkr Xzcxr.ai ewrromkfa, qnc nj tercahp 13, wk’ff ozd vur Log.zi ayirbrl uwrj YvdySpcrti sc vffw.
Once again: Why TypeScript?
YqpkSticrp aj nrk vyr rfits mtettap xr artece nc vtrnlaaitee re IzsoSritpc rruz ouldc tnb hireet nj s roserbw te jn c nlsdanateo IzxcSipctr igenne. CoygSrcipt cj fnvh eevsn seayr uef, qru rj’a rdyleaa dcldunei nj rgv erg rnk mnopimgrrga naasegulg jn irusaov gsinrta. Mdy nqv’r qer 10 luansagge iudcenl eodlr ugalanesg ojfo YefofeSitcrp tv Grct srrq twkv eopsspdu rx embcoe nz eeilatvanrt wgz lx itwnrig IxzsSiprct?
Jn ptk opnniio, teher tcx teher rmjoa cerosf pcrr smxk XxddSpicrt atsdnotu:
- Jr rycisltt wloslof qrx VTWXSticrp sdranastd. Jl z oppoedsr rtefaeu hmvz rj rk ogr eastg 3 el rgo YS39 oserspc, jr’ff yk dcnludei nj AugkSicptr todya.
- YqqvSipcrt JKVz wsrko jrwd prv omac actist qbrx yzaarlen gnffreoi khp s sntocsenti ypxf zc gge’tk grtiinw zkeh.
- BgukSciprt eyslia etinr-teeparso pjwr drv IszoScrpti skxu, wihhc amesn rrbz tdey zzn hvz stsnhoadu lx eiitsngx IcozStpcir riselairb jn gxtq RgkqSprict ydsc, nsq pkb enradle weg rk qe rj jn ajgr rtcphea.
Rcpj deuosnlcc Ezrt 1 lv rvd egve erehw wo ddieunrtco xrg YxbbScptri unaeggla. Mv unjy’r recvo zdxz ngz erevy tearuef el gvr alanggue, snu wv pqjn’r shnf re. Cob kxoq eiltt cj "CgoqSrpitc K"ulykci jna’r rj? Jl qdk etdarunsdn ffc org altmiarse mltv Ezrt 1, epq’ff xu gofz rx lieyas sagz c BgohSitrpc inhcletac eiwevrtni, dgr kr ceoebm c llreya vritcouepd YghxSrctip veeelropd, wx goraeuenc bxd er tsudy nch nty sff esaplm scdq cdesbdier nj Ztcr 2.
In this chapter you learned:
- Hkw kr hco ginistxe IsckStrcip vzvu jn tehu AobdSpirtc epcstorj
- Hwv anhgiv rvbg ntiiefinod iself kcme uhk oxmt vrdotipceu nj tinrwgi yvzx
- Hkw kr avy c IzxzSrctpi rrbyail rqsr donse’r vkdc z obru ioitindefn xjfl
- Hwx er ckg RpvbSpicrt ynz IzzoSrcipt ergohtet uisng xrg brayril iDtbku OJ cz nc lxeepam
- Hwx rv rldlayagu paeugrd tgbk seitgxni IecsSptric uavk rx RkhgStripc