当前位置: 首页 > Web前端 > JavaScript

如何更好的使用TypeScript

时间:2023-03-26 21:45:53 JavaScript

缂栧啓澶氬勾鐨刯s銆傚垰寮€濮嬪啓ts鐨勬椂鍊欙紝鐪熺殑寰堜笉涔犳儻銆傛暣浣撴劅瑙夊氨鍍忎竴涓鍥板湪灏侀棴瀛︽牎閲岀殑鏀捐崱涓嶇緛鐨勫皯骞淬€傚悗鏉ョ敤浜嗕竴娈垫椂闂存墠鐭ラ亾銆俆S纭疄鏄鏍¢噷涓ヤ弗瀹炲疄鐨勯櫌闀裤€備竴鏃︿綘涓嶉伒瀹堟牎瑙勶紝灏变細瑕佹眰浣犵粰鐖舵瘝鎵撶數璇濓紙鎶ラ敊锛夈€傛參鎱㈢殑浣犲氨浼氭垚涓轰竴涓箹宸ф噦浜嬬殑瀛︾敓銆傝鎴戜滑鐪嬬湅濡備綍涓€姝ユ瀛︿範銆?銆佸吇鎴愨€滃厛鎯冲悗鍋氣€濈殑濂戒範鎯€傚湪浠ュ線鐨勫紑鍙戣繃绋嬩腑锛屼範鎯€绘槸鈥滃厛鎯虫兂锛岃竟鎯宠竟鏀光€濄€傝繖鏍峰仛鐨勫ソ澶勬槸鎵ц閫熷害蹇紝椤虹殑鏃跺€欐晥鐜囦細楂橈紝浣嗘槸鏇村鐨勬椂鍊欎細涓嶆柇鐨勬帹缈昏嚜宸变箣鍓嶇殑鎯虫硶锛岀浉淇″緢澶氫汉鍜屾垜鏈夌被浼肩殑缁忓巻銆倀s鏄竴涓秴闆唈s锛屾剰鎬濇槸js鍙互鐩存帴鐢╰s鍐欙紝鍦ㄦ垜鐨勭涓€鍗拌薄涓紝js灏卞儚涓€涓紪璇戝ソ鐨勫彲鎵ц鏂囦欢锛屼紬鎵€鍛ㄧ煡锛宼s鏄竴绉嶅己绫诲瀷璇█锛屽氨鍍廕ava璇█涓€鏍凤紝杩欎篃鎰忓懗鐫€瀹冨彲浠ユ湁鏁堝湴闄愬埗浜嗗紑鍙戣€呭湪寮€鍙戣繃绋嬩腑鈥滀负鎵€娆蹭负鈥濈殑绋嬪害锛屼互涓嬫槸璇︾粏浠嬬粛馃憞1.瀹氫箟绫诲瀷鍜屾墿灞昑ypeScript鐨勬柟寮忓畾涔夌被鍨嬫湁涓ょ鏂瑰紡锛氭帴鍙e拰绫诲瀷鍒悕銆備笅闈㈢殑渚嬪瓙涓紝闄や簡璇硶涓嶅悓澶栵紝瀹氫箟鐨勭被鍨嬫槸涓€鏍风殑锛?/interfaceinterfacePointI{x:number;y:number;}interfaceSetPointI{(x:number,y:number):void;}//鎴?/绫诲瀷鍒悕PointT={x:number;y:number;}typeSetPointT=(x:number,y:number)=>void;鎺ュ彛鍜岀被鍨嬪埆鍚嶄笉浠呭彲浠ユ墿灞曪紝鑰屼笖鎺ュ彛鍜岀被鍨嬪埆鍚嶅苟涓嶄簰鏂ワ紝涔熷氨鏄锛屾帴鍙e彲浠ユ墿灞曠被鍨嬪埆鍚嶏紝绫诲瀷鍒悕涔熷彲浠ユ墿灞曟帴鍙?/interfaceextendstypealiastypePointX={x:number;}interfacePointYextendsPointX{y:number;}//typealiasextendsinterfaceinterfacePoint2X{x:number;}typePoint2Y=Point2X&{y:number;}鎺ュ彛鍜岀被鍨嬪埆鍚嶄篃鏈夊尯鍒€備緥濡傦紝涓€涓帴鍙e彲浠ュ畾涔夊娆★紝閮戒細琚涓轰竴涓帴鍙o紝浣嗘槸绫诲瀷鍒悕涓嶈兘閲嶅鎺ュ彛鍜岀被鍨嬩粈涔堟椂鍊欓€夋嫨鍒悕锛氬湪瀹氫箟涓€涓叕鍏盇PI锛堟瘮濡傜紪杈戜竴涓簱锛夋椂浣跨敤interface锛屼互渚夸簬鐢ㄦ埛鍙互杞绘澗缁ф壙鎺ュ彛锛涘湪瀹氫箟缁勪欢灞炴€э紙Props锛夊拰鐘舵€侊紙State锛夋椂锛屾帹鑽愪娇鐢╰ype锛屽洜涓簍ype鐨勯檺鍒舵€ф洿寮猴紱type绫诲瀷涓嶅彲浜屾缂栬緫锛屾帴鍙e彲闅忔椂鎵╁睍銆?.TS鏀寔鐨凧S鏂扮壒鎬?.1鍙€夐摼锛圤ptionalChaining锛塗ypeScript3.7瀹炵幇浜嗗懠澹版渶楂樼殑ECMAScript鐗规€т箣涓€锛氬彲閫夐摼锛圤ptionalChaining锛夈€傞€氳繃鍙€夐摼锛屾垜浠彲浠ュ湪缂栧啓浠g爜鏃堕亣鍒皀ull鎴杣ndefined鏃剁珛鍗冲仠姝㈡煇浜涜〃杈惧紡鐨勮繍琛屻€傚彲閫夐摼鐨勬牳蹇冩槸鏂扮殑?銆俹perator.obj?.propobj?.[expr]arr?.[index]func?.(args)鍙€夐摼锛圤ptionalChaining锛?銆侲S11锛圗S2020锛変腑鏂板鐨勫彲閫夐摼璁╂垜浠湪鏌ヨ澶氱骇瀵硅薄鏃朵笉鍐嶉渶瑕佽繘琛屽啑浣欑殑鍚勭棰勬鏌ワ細letage=user&&user.info&&user.info.getAge()letage=user?.info?.getAge?.()浣嗛渶瑕佹敞鎰忕殑鏄?.涓?&杩愮畻绗︾殑琛屼负鐣ユ湁涓嶅悓锛?&涓撻棬鐢ㄤ簬妫€娴嬮敊璇€硷紝渚嬪绌哄瓧绗︿覆銆?銆丯aN銆乶ull鍜宖alse绛夈€傚拰锛熴€傚彧浼氶獙璇佸璞℃槸鍚︿负null鎴杣ndefined锛屼笉浼氬0鎴栫┖瀛楃涓茶繘琛屸€滅煭璺€濄€?.2鍙€夊睘鎬у湪闈㈠悜瀵硅薄璇█涓紝鎺ュ彛鏄竴涓潪甯搁噸瑕佺殑姒傚康锛屽畠鏄琛屼负鐨勬娊璞★紝鍏蜂綋鐨勮涓洪渶瑕佺被鏉ュ疄鐜般€俆ypeScript涓殑鎺ュ彛鏄竴涓潪甯哥伒娲荤殑姒傚康銆傞櫎浜嗘娊璞$被鐨勯儴鍒嗚涓哄锛屽畠杩樺父琚敤鏉ユ弿杩扳€滃璞$殑褰㈢姸锛圫hape锛夆€濄€傚湪TypeScript涓娇鐢╥nterface鍏抽敭瀛楁潵澹版槑涓€涓帴鍙o細interfacePerson{name:string;骞撮緞锛氭暟瀛楋紱}letzhangsan:Person={name:"zhangsan",age:33,};鍦ㄤ笂闈㈢殑浠g爜涓紝鎴戜滑澹版槑浜哖erson鎺ュ彛锛屽叾涓寘鍚袱涓繀闇€鐨勫睘鎬ame鍜宎ge銆傚湪鍒濆鍖朠erson绫诲瀷鍙橀噺鏃讹紝濡傛灉缂哄皯鏌愪釜灞炴€э紝TypeScript缂栬瘧鍣ㄤ細鎻愮ず鐩稿簲鐨勯敊璇俊鎭紝渚嬪锛氫负浜嗚В鍐充笂杩伴棶棰橈紝鎴戜滑鍙互灏嗘煇涓睘鎬у0鏄庝负鍙€夛細interfacePerson{name:string;骞撮緞锛燂細鏁板瓧锛泒letlisi:Person={name:"lisi"}2.3NullishcoalescingOperator褰搉ullcoalescingoperator鐨勫乏杈硅〃杈惧紡涓嶄负null鎴杣ndefined鏃讹紝鍙宠竟鐨勮〃杈惧紡琚眰鍊笺€俢onstgoods={price:0,}letgoods1=goods.price??'娌℃湁鎶ヤ环'璁ゞoods2=goods.jdPrice??'Nooffer'console.log(goods1)//0console.log(goods2)//Noquotesyet涓嶅悓浜庨€昏緫鎴栬繍绠楃锛坾|锛夛紝||濡傛灉宸︽搷浣滄暟鍏锋湁鍋囧€硷紙渚嬪锛?'鎴?锛夛紝鍒欒繑鍥炲彸鎿嶄綔鏁般€備篃灏辨槸璇达紝濡傛灉浣犱娇鐢▅|涓烘煇浜涘彉閲忚缃粯璁ゅ€硷紝浣犲彲鑳戒細閬囧埌鎰忔兂涓嶅埌鐨勮涓猴細constgoods={price:0,}letgoods1=goods.price||'Noofferyet'璁ゞoods2=goods.price??'Noquoteyet'console.log(goods1)//Noquoteyetconsole.log(goods2)//03.TypeNarrowingTypeScriptTypeNarrowing鏄粠瀹界被鍨嬭浆鎹负绐勭被鍨嬬殑杩囩▼锛屽父鐢ㄤ簬澶勭悊鑱斿悎绫诲瀷鍙橀噺鐨勫満鏅€傚湪TypeScript涓紝鏈夊绉嶆柟娉曞彲浠ョ缉灏忓彉閲忕殑绫诲瀷锛歍ypeassertionTypeguardDoubleassertion3.1绫诲瀷鏂█绫诲瀷鏂█鏈変袱绉嶇被鍨嬶細valueastype鎴?type>value涓€鑸垜浠娇鐢╲alueastype鐨勮娉曠粺涓€锛屽洜涓?>寰堝鏄撳拰娉涘瀷璇硶鍐茬獊銆傚綋TypeScript涓嶇‘瀹氫竴涓仈鍚堢被鍨嬬殑鍙橀噺鏄摢绉嶇被鍨嬫椂锛屾垜浠彧鑳借闂繖涓仈鍚堢被鍨嬬殑鎵€鏈夌被鍨嬪叡鏈夌殑灞炴€ф垨鏂规硶interfacerabbit{name:string;jump():void;}interfacedog{鍚嶇О锛氬瓧绗︿覆锛況un():void;}functionisRabbit1(animal:rabbit|dog){returnanimal.name}鏈夋椂锛屽綋鎴戜滑涓嶇‘瀹氱被鍨嬫椂锛屾垜浠‘瀹為渶瑕佽闂壒瀹氫簬绫诲瀷鐨勫睘鎬ф垨鏂规硶涔嬩竴銆備緥濡傦細鍦ㄤ笂闈㈢殑渚嬪瓙涓紝鑾峰彇animal.jump鏃朵細鎶ラ敊銆傝繖鏃跺€欏彲浠ヤ娇鐢ㄧ被鍨嬫柇瑷€锛屽皢animal鏂█涓簉abbit绫诲瀷锛屽彲浠ヨВ鍐宠闂產nimal.jump鎶ラ敊鐨勯棶棰橈細interfacerabbit{name:string;jump():void;}interfacedog{鍚嶇О锛氬瓧绗︿覆锛況un():void;}functionisRabbit(animal:rabbit|dog){if(typeof(animalasrabbit).jump==='function'){returntrue}returnfalse}铏界劧绫诲瀷鏂█寰堝ソ锛屼絾涓嶈兘琚檺寰呫€備細缁曡繃缂栬瘧鍣紝浣嗘棤娉曢伩鍏嶈繍琛屾椂閿欒銆傜晫闈㈠厰瀛恵鍚嶇О锛氬瓧绗︿覆锛沯ump():void;}interfacedog{鍚嶇О锛氬瓧绗︿覆锛況un():void;}functionrabbitJump(animal:rabbit|dog){(animalasrabbit).jump()}constjack:dog={name:'Jack',run(){console.log("杩愯")}}rabbitJump(jack)//杩愯浼氭姤閿橳ypeScript缂栬瘧鍣ㄤ俊浠绘垜浠殑鏂█锛屾墍浠ュ湪璋冪敤rabbitJump()鏃朵笉浼氬嚭鐜扮紪璇戦敊璇紝浣嗘槸鍥犱负jack涓婃病鏈塲ump鏂规硶锛屾墍浠ヤ細鎶ラ敊鍦ㄨ繍琛屻€備娇鐢ㄧ被鍨嬫柇瑷€鏃惰鏍煎灏忓績锛屽敖閲忛伩鍏嶅湪鏂█鍚庤皟鐢ㄦ柟娉曟垨寮曠敤娣卞眰灞炴€э紝浠ュ噺灏戜笉蹇呰鐨勮繍琛屾椂閿欒銆?.2TypeguardTypeguard涓昏鏈変互涓嬫柟娉曪細typeof锛氱敤浜庡垽鏂璶umber銆乻tring銆乥oolean鎴杝ymbol鍥涚绫诲瀷锛沬nstanceof锛氱敤浜庡垽鏂竴涓疄渚嬫槸鍚﹀睘浜庢煇涓被in锛氱敤浜庡垽鏂竴涓睘鎬?鏂规硶鏄惁灞炰簬鏌愪釜瀵硅薄鍙互浣跨敤typeof鏉ュ疄鐜扮被鍨嬬缉灏忓拰姘镐笉绫诲瀷鐗瑰緛鍋氬叏闈㈢殑妫€鏌ワ紝濡傚浘浠ヤ笅浠g爜锛氱被鍨婩oo=string|numberfunctiontest(input:Foo){if(typeofinput=='string'){//杩欓噷杈撳叆鈥渢ightened鈥濈殑绫诲瀷鏄瓧绗︿覆}elseif(typeofinput=='number'){//杩欓噷鏄被鍨媜finput"tightened"isnumber}else{//杩欓噷input"Tighten"鐨勭被鍨媙everconstisShow:never=input}}濡備綘鎵€瑙侊紝鍦ㄦ渶鍚庝竴涓猠lse鍒嗘敮涓紝鎴戜滑灏唅nputnarrowedtonever鍒嗛厤缁欎竴涓粠涓嶆樉绀哄拰澹版槑鐨勫彉閲忋€傚鏋滄墍鏈夌殑閫昏緫閮芥槸姝g‘鐨勶紝閭d箞杩欓噷搴旇鍙互Compilationpassed銆備絾鏄鏋滄湁涓€澶╀綘鐨勫悓浜嬩慨鏀逛簡Foo鐨勭被鍨嬶紝蹇樿淇敼娴嬭瘯鏂规硶涓殑鎺у埗娴侊細杩欐椂鍊檈lse鍒嗘敮鐨勮緭鍏ョ被鍨嬪氨浼氱缉灏忎负boolean绫诲瀷锛屽鑷存棤娉曡祴鍊肩粰never绫诲瀷銆傚皢浜х敓缂栬瘧閿欒銆備娇鐢╥nstanceof杩愮畻绗︽潵缂╁皬鍙橀噺鐨勭被鍨嬩娇鐢╥n杩涜灞炴€ф鏌?{//杩欓噷杈撳叆鈥渢ighten鈥濈殑绫诲瀷鏄疐oo}else{//杩欓噷杈撳叆鈥渢ighten鈥濈殑绫诲瀷鏄疊ar}}3.3鍙岄噸鏂█绫诲瀷鏂█骞朵笉鎬绘槸鎴愬姛锛屼緥濡傦細涓婇潰鐨勪唬鐮乪xample灏嗘姤鍛婇敊璇紙绫诲瀷鈥淓vent鈥濆埌绫诲瀷鈥淗TMLElement鈥濈殑杞崲鍙兘鏄敊璇殑锛屽洜涓鸿繖涓ょ绫诲瀷娌℃湁鍏呭垎閲嶅彔銆傚鏋滆繖鏄湁鎰忕殑......锛夛紝灏界宸茬粡浣跨敤浜嗙被鍨嬫柇瑷€銆傚鏋滄偍浠嶆兂浣跨敤璇ョ被鍨嬶紝鍒欏彲浠ヤ娇鐢ㄥ弻閲嶆柇瑷€銆傞鍏堟柇瑷€鍏煎any鐨勬墍鏈夌被鍨嬶紝缂栬瘧鍣ㄤ笉浼氭姤閿欙細functionhandler(event:Event){constelement=(eventasany)asHTMLElement;//OK}TypeScript濡備綍纭畾鍗曚釜鏂█鏄惁瓒冲锛熷鏋滅被鍨嬫槸绫诲瀷T鐨勫瓙闆嗭紝鎴栬€呯被鍨婽鏄被鍨婼鐨勫瓙闆嗭紝鍒橲鍙互鎴愬姛鏂█涓篢銆傝繖鏄负浜嗗湪杩涜绫诲瀷鏂█鏃舵彁渚涢澶栫殑瀹夊叏鎬э紝瀹屽叏娌℃湁鏍规嵁鐨勬柇瑷€鏄嵄闄╃殑锛屽鏋滀綘鎯宠繖鏍峰仛閭o紝浣犲彲浠ヤ娇鐢ㄤ换浣?4.鏋氫妇鏋氫妇鏄竴绉嶇粍缁囧拰鏀堕泦鍏宠仈鍙橀噺鐨勬柟娉曘€傞鍏堬紝璁╂垜浠湅涓€涓嬫櫘閫氱殑鏋氫妇銆傚鏋滄偍浣跨敤杩囧叾浠栫紪绋嬭瑷€锛屾偍搴旇鐔熸倝瀹冧滑銆俥numColor{Red=1,//1Green,//2Blue,//3}濡備笂锛屾垜浠畾涔変簡涓€涓暟瀛楁灇涓撅紝Red鍒濆鍖栦负1锛屽叾浣欐垚鍛樺皢浠?寮€濮嬭嚜鍔ㄥ闀裤€備篃灏辨槸璇达紝Color.Red鐨勫€间负1锛孏reen涓?锛孊lue涓?锛屽鏋淩ed娌℃湁鍒濆鍖栵紝鍒欎粠0寮€濮嬨€備絾鏄繖鏍峰啓鏈変釜闂锛氬綋鏋氫妇鐨勬煇涓垚鍛樹笉鏄暟瀛楁椂锛屽悗闈㈢殑鏋氫妇鎴愬憳闇€瑕佸拰瀹冧繚鎸佷竴鑷达紝浠ュ厤鎶ラ敊enumColor{Red,//0Green="Green",//GreenBlue="Blue",//Blue}鏅€氭灇涓剧殑鍊煎湪缂栬瘧闃舵涓嶄細璁$畻锛岃€屾槸鍦ㄧ▼搴忔墽琛岄樁娈典繚鐣欍€傛垜浠湅涓嬮潰鐨勪緥瀛愶細enumColor{//甯搁噺鏋氫妇Red,purple,Green=Color.Red,Blue=1+1,//闈炲父閲忔灇涓緔ellow=Math.random(),black='hello'銆俵ength,}涓婇潰渚嬪瓙鐨勭紪璇戠粨鏋滄槸锛歷arColor;(function(Color){Color[(Color['Red']=0)]='Red';Color[(Color['purple']=0)]='绱壊';棰滆壊[(棰滆壊['缁胯壊']=0)]='缁胯壊';棰滆壊[(棰滆壊['钃濊壊']=2)]='钃濊壊';棰滆壊[(棰滆壊['榛勮壊']=Math.random())]='榛勮壊';Color[(Color['black']='hello'.length)]='black';})(Color||(Color={}));棣栧厛鎴戜滑鍏虫敞Color[(Color['Red']=0)]='Red''杩欒浠g爜锛屽叾涓瑿olor['Red']=0琛ㄧず灏咰olor瀵硅薄涓璕ed鎴愬憳鐨勫€艰缃负0.娉ㄦ剰锛孞avaScript璧嬪€艰繍绠楃杩斿洖鐨勫€兼槸琚祴鍊肩殑鍊硷紙鏈緥涓负0锛夛紝鍥犳涓嬫JavaScript杩愯鏃舵墽琛岀殑浠g爜鏄疌olor[0]='Red'銆傝〃绀哄彲浠ヤ娇鐢–olor鍙橀噺灏嗗瓧绗︿覆鏋氫妇绫诲瀷杞寲涓烘暟瀛楁垨鏁板€兼灇涓剧被鍨嬶紝濡備笅锛歟numColor{Red,Blue=1+1,yellow=Math.random(),black='hello'.length,}console.log(棰滆壊[0]);//'绾㈣壊'console.log(Color['绾㈣壊']);//0console.log(Color[Color.Red]);//'Red'5.楂樼骇绫诲瀷闄や簡string銆乶umber銆乥oolean绛夊熀鏈被鍨嬪锛屾垜浠繕搴旇浜嗚В涓€浜涚被鍨嬪0鏄庝腑鐨勪竴浜涢珮绾х敤娉曘€?.1extends鍏抽敭瀛楃殑鍩烘湰鐢ㄦ硶锛歍extendsU?X:Y琛ㄧず濡傛灉T鍙互璧嬪€肩粰U锛堢被鍨嬪吋瀹癸級锛屽垯杩斿洖X锛屽惁鍒欒繑鍥瀁锛涗互鍐呯疆娉涘瀷鎺ュ彛Extract涓轰緥锛屽叾瀹炵幇濡備笅锛歵ypeExtract=TextendsU?T:neverTypeScript灏嗕娇鐢╪ever绫诲瀷鏉ヨ〃绀轰笉搴旇瀛樺湪鐨勭姸鎬併€備笂闈㈢殑鎰忔€濇槸锛屽鏋淭涓殑绫诲瀷瀛樺湪浜嶶涓紝鍒欒繑鍥烇紝鍚﹀垯涓㈠純銆傚亣璁炬垜浠湁涓や釜绫伙紝鍏辨湁涓変釜鍏卞悓鐨勫睘鎬э紝鍙互閫氳繃Extract鎻愬彇鍑烘潵锛歍ypeScript鏈夊緢澶氬唴缃殑宸ュ叿娉涘瀷锛岄櫎浜嗕粙缁嶇殑锛屽唴缃殑娉涘瀷閮藉湪TypeScript鍐呯疆鐨刲ib.es5.d涓€倀s閲岄潰鏈夊畾涔夛紝鎵€浠ュ彲浠ョ洿鎺ヤ娇鐢紝涓嶉渶瑕佷换浣曚緷璧栥€?.2浣跨敤keyof鍩虹瀹炰緥锛歩nterfaceFoo{name:string;age:number}typeT=keyofFoo//鐩稿綋浜巘ypeT="name"锝?age"extends缁忓父鍜宬eyof涓€璧蜂娇鐢紝姣斿鎴戜滑鏈変竴涓猤etValuemethoddedicated鐢ㄤ簬鑾峰彇瀵硅薄鐨勫€硷紝浣嗘槸瀵硅薄涓嶇‘瀹氾紝鎴戜滑鍙互浣跨敤extends鍜宬eyof鏉ョ害鏉燂細褰撲紶鍏ュ璞℃病鏈夌殑key鏃讹紝缂栬緫鍣ㄤ細鎶ラ敊銆?.3浣跨敤inin閬嶅巻鏋氫妇绫诲瀷锛屼緥濡傦細typeKeys="a"|"b"typeObj={[pinKeys]:any}//{a:any,b:any}keyof浜х敓涓€涓仈鍚堢被鍨嬶紝in鍙互閬嶅巻鏋氫妇绫诲瀷锛屾墍浠ョ粡甯镐竴璧蜂娇鐢ㄣ€傚叾娆★紝濂戒範鎯渶瑕佹參鎱㈠吇鎴愩€傚鏋滀綘鍙帉鎻′簡TypeScript鐨勪竴浜涘熀鏈被鍨嬶紝鍙兘寰堥毦娓稿垉鏈変綑鍦颁娇鐢═ypeScript銆傝鎯抽┚椹緱濂斤紝鍙兘涓嶆柇瀛︿範鍜屾帉鎻°€傛湰鏂囦粎浠嬬粛鍑犵甯哥敤鐨勫仛娉曘€傚笇鏈涜繕娌℃湁鎺ヨЕ杩嘥ypeScript鎴栬€呬笉鐔熸倝TypeScript鐨勬湅鍙嬩滑鍙互鍦ㄩ」鐩腑蹇€熷疄璺碉紝鍔姏鎻愰珮浠g爜鐨勫彲缁存姢鎬у拰寮€鍙戠殑骞哥鎰熴€傛劅璋㈡偍闃呰銆?.鍙傝€冩枃妗ypeScript瀹樻柟鏂囨。