当前位置: 首页 > 后端技术 > Node.js

TypeScript提升幸福感的10个进阶技巧

时间:2023-04-03 16:31:56 Node.js

鎴戜娇鐢═ypeScript宸茬粡涓€骞翠簡锛岄」鐩腑浣跨敤鐨勬妧鏈槸Vue+TypeScript銆傛繁鎰烼ypeScript鍦ㄤ腑澶у瀷椤圭洰涓殑蹇呰鎬э紝灏ゅ叾鏄敓鍛藉懆鏈熸瘮杈冿紝鍦ㄩ暱澶у瀷椤圭洰涓洿搴旇浣跨敤TypeScript銆備互涓嬫槸鎴戝湪宸ヤ綔涓粡甯镐娇鐢ㄧ殑TypeScript鎶€宸с€?.璇勮鍙互鐢?***/褰㈠紡鐨勮瘎璁烘潵鏍囩ずTS绫诲瀷锛岀紪杈戝櫒浼氭湁鏇村ソ鐨勬彁绀猴細/**Thisisacoolguy銆?/interfacePerson{/**杩欐槸鍚嶅瓧銆?/name:string,}constp:Person={name:'cool'}濡傛灉浣犳兂缁欎竴涓睘鎬ф坊鍔犺瘎璁烘垨鑰呭弸鎯呮彁閱掞紝杩欐槸涓ソ鍔炴硶銆?.鎺ュ彛缁ф壙鍜岀被涓€鏍凤紝鎺ュ彛涔熷彲浠ョ浉浜掔户鎵裤€傝繖鍏佽鎴戜滑灏嗘垚鍛樹粠涓€涓帴鍙e鍒跺埌鍙︿竴涓帴鍙o紝浠庤€屾洿鐏垫椿鍦板皢鎺ュ彛鎷嗗垎涓哄彲閲嶇敤鐨勬ā鍧椼€俰nterfaceShape{color:string;}interfaceSquareextendsShape{sideLength:number;}letsquare={};square.color="blue";square.sideLength=10;涓€涓帴鍙e彲浠ョ户鎵垮涓帴鍙o紝鍒涘缓杈撳嚭澶氫釜鎺ュ彛鐨勫悎鎴愭帴鍙c€俰nterfaceShape{color:string;}interfacePenStroke{penWidth:number;}interfaceSquareextendsShape,PenStroke{sideLength:number;}letsquare={};square.color="blue";square.sideLength=10澶嶅埗浠g爜;square.penWidth=5.0;3.interface&type鍦═ypeScript涓畾涔夌被鍨嬫湁涓ょ鏂瑰紡锛氭帴鍙e拰绫诲瀷鍒悕銆備緥濡備笅闈㈢殑Interface鍜孴ype鍒悕鐨勪緥瀛愶紝闄や簡璇硶涓嶅悓锛屽惈涔夋槸涓€鏍风殑锛欼nterfaceinterfacePoint{x:number;y:number;}interfaceSetPoint{(x:number,y:number):void;}TypealiastypePoint={x:number;y:number;};typeSetPoint=(x:number,y:number)=>void;涓よ€呴兘鍙互鎵╁睍锛屼絾璇硶涓嶅悓銆傚彟澶栵紝璇锋敞鎰忔帴鍙e拰绫诲瀷鍒悕骞朵笉鐩镐簰鎺掓枼銆傛帴鍙e彲浠ユ墿灞曠被鍨嬪埆鍚嶏紝鍙嶄箣浜︾劧銆傛帴鍙f墿灞曟帴鍙f帴鍙artialPointX{x:number;}interfacePointextendsPartialPointX{y:number;}绫诲瀷鍒悕鎵╁睍绫诲瀷鍒悕PartialPointX={x:number;};typePoint=PartialPointX&{y:number;};鎺ュ彛鎵╁睍绫诲瀷鍒悕PartialPointX={x:number;};interfacePointextendsPartialPointX{y:number;}绫诲瀷鍒悕鎵╁睍鎺ュ彛鎺ュ彛PartialPointX{x:number;}typePoint=PartialPointX&{y:number;瀹冧滑涔嬮棿鐨勫尯鍒彲浠ョ湅涓嬪浘鎴栬€呯湅TypeScript:InterfacesvsTypes銆傛墍浠ュ阀濡欏湴浣跨敤鐣岄潰鍜岀被鍨嬪苟涓嶅鏄撱€傚鏋滀綘涓嶇煡閬撹鐢ㄤ粈涔堬紝璁颁綇锛氬鏋滀綘鍙互浣跨敤鎺ュ彛锛屽氨浣跨敤鎺ュ彛锛屽鏋滀笉鑳斤紝灏变娇鐢ㄧ被鍨嬨€?.typeoftypeof杩愮畻绗﹀彲鐢ㄤ簬鑾峰彇鍙橀噺鎴栧璞$殑绫诲瀷銆傛垜浠竴鑸厛瀹氫箟绫诲瀷锛岀劧鍚庝娇鐢細interfaceOpt{timeout:number}constdefaultOption:Opt={timeout:500}鏈夋椂鍙互鍙嶈繃鏉ワ細constdefaultOption={timeout:500}typeOpt=typeofdefaultOption褰撲竴涓帴鍙lwayshas瀵逛簬瀛楅潰閲忓垵濮嬪€硷紝鍙互鑰冭檻杩欑鍐欐硶锛屽噺灏戦噸澶嶄唬鐮侊紝鑷冲皯鍑忓皯浜嗕袱琛屼唬鐮侊紝鍝堝搱~5.keyofTypeScript鍙互璁╂垜浠亶鍘嗘煇绫诲睘鎬э紝鎻愬彇鍚嶇О瀹冪殑灞炴€ч€氳繃keyof杩愮畻绗︺€俴eyof杩愮畻绗︽槸鍦═ypeScript2.1涓紩鍏ョ殑銆傝杩愮畻绗﹀彲鐢ㄤ簬鑾峰彇鏌愪竴绫诲瀷鐨勬墍鏈夐敭锛屽叾杩斿洖绫诲瀷涓鸿仈鍚堢被鍨嬨€俴eyof涓嶰bject.keys鐣ユ湁鐩镐技锛屽彧鏄痥eyof鎺ュ彈鐣岄潰鐨勯敭銆俢onstpersion={age:3,text:'helloworld'}//杈撳叆閿?"age"|鈥滄枃鏈€濈被鍨媖eys=keyofPoint;鍦ㄥ啓鑾峰彇瀵硅薄涓睘鎬у€肩殑鏂规硶鏃讹紝澶ч儴鍒嗕汉鍙兘浼氳繖鏍峰啓鍑芥暟get1(o:object,name:string){returno[name];}constage1=get1(persion,'age');consttext1=get1(persion,'text');浣嗘槸浼氭彁绀洪敊璇紝鍥犱负娌℃湁瀵硅薄涔嬪墠澹版槑鐨刱ey銆傚綋鐒跺鏋滄妸o:object鏀规垚o:any涔熶笉浼氭姤閿欙紝浣嗘槸寰楀埌鐨勫€间細娌℃湁绫诲瀷锛屽彉鎴恆ny銆傝繖鏃跺€欏彲浠ヤ娇鐢╧eyof鏉ュ姞寮篻et鍑芥暟鐨勭被鍨嬪姛鑳姐€傛湁鍏磋叮鐨勫悓瀛﹀彲浠ョ湅鐪媉.get鐨勭被鍨嬫爣绛撅紝瀹炵幇functionget(o:T,name:K):T[K]{returno[name]}6.鏌ユ壘typeinterfacePerson{addr:{city:string,street:string,num:number,}}褰撻渶瑕佷娇鐢╝ddr鐨勭被鍨嬫椂锛岄櫎浜嗘妸type甯﹀嚭interfaceAddress{city:string,street:string,num:number,}interfacePerson{addr:Address,}涔熷彲浠erson["addr"]//ThisisAddress.渚嬪锛歝onstaddr:Person["addr"]={city:'string',street:'string',num:2}鍦ㄦ煇浜涙儏鍐典笅锛屽悗鑰呬細浣夸唬鐮佹洿娓呮櫚鏄撹銆?.Findtype+generics+keyof娉涘瀷锛圙enerics锛夋槸鎸囧湪瀹氫箟鍑芥暟銆佹帴鍙f垨绫绘椂锛屼笉浜嬪厛鎸囧畾鍏蜂綋绫诲瀷锛岃€屾槸鍦ㄤ娇鐢ㄦ椂鎸囧畾绫诲瀷鐨勭壒鎬с€俰nterfaceAPI{'/user':{name:string},'/menu':{foods:string[]}}constget=(url:URL):Promise=>{returnfetch(url).then(res=>res.json());}get('');get('/menu').then(user=>user.foods);8.绫诲瀷鏂█Vueref甯哥敤浜庣粍浠朵腑鑾峰彇瀛愮粍浠剁殑灞炴€ф垨鏂规硶锛屼絾寰€寰€鏃犳硶鎺ㄦ柇鍑哄瓨鍦ㄥ摢浜涘睘鎬у拰鏂规硶锛屼細鎶ラ敊銆傚瓙缁勪欢锛?scriptlang="ts">import{Options,Vue}from"vue-class-component";@Options({props:{msg:String,},})exportdefaultclassHelloWorldextendsVue{msg!:string;}鐖剁粍浠讹細鍥犱负this.$refs.helloRef鏄湭鐭ョ被鍨嬶紝浼氭姤閿欙細justmakeatypeassertion:print(){//consthelloRef=this.$refs.helloRef;consthelloRef=this.$refs.helloRefasany;console.log("helloRef.msg:",helloRef.msg);//helloRef.msg:WelcometoYourVue.js+TypeScriptApp}浣嗘槸褰撶被鍨嬫柇瑷€鏄痑ny鏃讹紝灏变笉濂戒簡銆傜煡閬撳叿浣撶殑绫诲瀷灏卞啓鍏蜂綋鐨勭被鍨嬶紝鍚﹀垯寮曞叆TypeScript9浼间箮娌℃湁鎰忎箟銆傛樉寮忔硾鍨?('button')鏄竴涓狣OM鍏冪礌閫夋嫨鍣紝浣嗘槸杩斿洖鍊肩殑绫诲瀷鍙兘鍦ㄨ繍琛屾椂纭畾銆傞櫎浜嗚繑鍥瀉ny锛岃繕鍙互function$(id:string):T{return(document.getElementById(id))asT;}//涓嶇‘瀹氳緭鍏ョ被鍨?/constinput=$('input');//鍛婅瘔鎴戝畠鏄粈涔堝厓绱犮€俢onstinput=$('input');console.log('input.value:',input.value);鍑芥暟娉涘瀷涓嶄竴瀹氳鑷姩鎺ㄥ绫诲瀷锛屾湁鏃舵樉寮忔寚瀹氱被鍨嬩細寰堝ソ銆?0.DeepReadonly鏍囨湁readonly鐨勫睘鎬у彧鑳藉湪澹版槑鏃舵垨绫荤殑鏋勯€犲嚱鏁颁腑璧嬪€笺€備箣鍚庝笉鑳芥洿鏀癸紙鍗冲彧璇诲睘鎬э級锛屽惁鍒欏皢鎶涘嚭TS2540閿欒銆傚拰ES6涓殑const寰堝儚锛屼絾鏄痳eadonly鍙兘鐢ㄥ湪绫讳腑鐨勫睘鎬э紙鎴栬€匱S涓殑鎺ュ彛锛変笂锛岀浉褰撲簬涓€涓彧鏈塯etter娌℃湁setter鐨勫睘鎬х殑璇硶绯栥€備互涓嬪疄鐜版繁搴﹀0鏄庡彧璇荤被鍨嬶細typeDeepReadonly={readonly[PinkeyofT]:DeepReadonly;}consta={foo:{bar:22}}constb=aasDeepReadonlyb.foo.bar=33//Can'tassignto'bar'becauseitisaread-onlyproperty.ts(2540)鏈€鍚庡悇浣嶅ぇ浣紝濡傛灉瑙夊緱鏈夌敤锛岀偣涓禐鍚с€傚ソ涔呮病鍐欏師鍒涙妧鏈枃绔犱簡銆備綔涓?021骞寸殑绗竴绡囧師鍒涙妧鏈枃绔狅紝璐ㄩ噺搴旇杩樺彲浠ュ惂馃槃浣滆€呭勾缁堟€荤粨鍦ㄨ繖閲岋細鍓嶇宸ョ▼甯?020骞寸粓鎬荤粨鈥斺€斾笘鐣屾湭瀹氾紝浣犳垜閮芥槸榛戦┈锛屽笇鏈涘彲浠ュ甫缁欎綘涓€鐐瑰惎鍙戙€傚弬鑰冩枃绔狅細TypeScript杩涢樁鎶€宸т娇鐢═ypescript鐔熺粌浣跨敤Typescript锛堜簩锛夌晫闈㈡帹鑽愰槄璇诲墠绔伐绋嬪笀2019骞寸粓鎬荤粨鈥斺€斿嫟濂嬪嫟濂嬶紝浣嗚鏃犲父