




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
TypeScriptts語裝飾器原源新建一個基于ts的vue項vuevueaddTS類型////ts-letvar1:string;//類型注解var1="開課吧";//var1=4;////編譯器類型推斷可省略這個letvar2=//常見原始類型:類型////類型數letarr:arr=['Tom'];//或//任意類型anyletvarAnyany;varAny='xx';varAny=3;any類型也可用于數組letarrAny:any[];arrAny=[1,true, arrAny[1]=//函數中的類型約function{return}:string):o,';//void類型,常用于沒有返回值的函functionwarn():void//對象object:不是原始類型的functionfn1(o:object){}fn1({prop:0});//OKfn1(1);//Errorfn1("string");//Error//更好的約束方式應該是下面functionfn2(o:{prop:number}){}fn2({prop:0})//OK//類型別名type:自typeProp={prop:number//fn3變得更清爽了functionfn3(oProp){}范例, <liv-for="featureinfeatures" <scriptimport{Component,Prop,Vue}from"vue-property-exportdefaultoextends{features:string[]=["類型注解","編譯型語言}類型constconstsomeValue:any="thisisastring";conststrLength=(someValueasstring).length;聯合希望某個變量或參數的類型是多種類型其中letletunion:string|number;union='1';//okunion=1;//交叉typetypeFirst={first:number};typeSecond={second:number};typeFirstAndSecond=First&functionfn3(param:FirstAndSecond):{return{first:1,}必填參:參數一旦,就要求傳遞,且類型需符////02-function :string):{return o," }可選參數:參數名后面加上問號,變成可選functionfunction{returno,":string,msg?:string):;}默認functionfunction{returno,":string,msg=''):;}*函數重載:以參數數量或類型區分多個同////重載functionwatch(cb1:()=>void)://重載functionwatch(cb1:()=>void,cb2:(v1:any,v2:any)=>void)://functionwatch(cb1:()=>void,cb2?:(v1:any,v2:any)=>{if(cb1&&cb2){}elseconsole.log('執行watch重載}}范例:新增特性,<input<input ceholder="輸入新特性"addFeature(e:KeyboardEvent)//e.target是EventTarget類型,需要斷言為HTMLInpu constinp=e.targetasHTMLInpu inp.value=}范例:生命周期鉤子,createdcreated()this.features=[{id:1,name:"類型注解"}類}class的特}classParentprivate_foo="foo";//私有屬性,不能在類的外protectedbar="bar";//保護屬性,可以在子類//參數屬性:構造函數參數加修飾符,能夠定constructor(publictua="tua")//方法也有修飾符privatesomeMethod()//存取器:屬性方 ,可添加額外邏輯,控制讀寫getfoo()return}set{this._foo=}} <li>特性數量 <scriptexportdefault oWorldextendsVue//定義getter作為計算getcount()return}}接口僅約束結構,不要求實////04- 接口定義了 firstName:string;lastName:string;}//greeting函數通過functiongreeting(接口約束:return o,').firstName+''}greeting({firstName:'Jane',lastName:'User'});//greeting({firstName:////接口中只需定義結構,不interface{id:number;name:}使用 <!--修改模板<liv-for="featureinfeatures" <script//導入接import{Feature}fromexportdefault//修改數據結構oextendsVuefeatures:Feature[]=[{id:1,name:"類型注解"addFeature(e:KeyboardEvent)新增的數據也要符合Feature結this.features.push({id:this.features.length+1,name:inp.value}}泛型(Geneis)是指在定義函數、接口或類的時候,不預先指定具體的類型,而在使用的時候再指定類型的一種特性。以此增加代碼通用性。////不用泛//interfaceResult ok:0| data:////使用泛interface{ok:0|1;data:T;}//泛型方functiongetResult<T>(data:T):{return{ok:1,}}//用尖括號方式指定T為string //用類型推斷指定T為number泛型優點函數和類可以支持多種類型安裝axiosnpmiaxios-配置一個模擬接module.exportsmodule.exports{devServer:{app.get('/api/list',(req,res){{id:1,name:"類型注解",version:"2.0"{id:2,name:"編譯型語言",version:"1.0"}}}importimportaxiosfromimportFeaturefromexportfunctiongetFeatures()//通過泛型約束返回值類型,這里是Promise<AxiosResponse<Feature[]>>returnaxios.get<Feature[]>('/api/list')} createdcreated()//getFeatures()返回//res類型推斷為//res.data類型推斷為Feature[]getFeatures().then(res=>{this.features=}////importaxiosfrom'axios'Vtotype.$axios=axios;//shims-vue.d.tsimportVuefrom"vue";import{AxiosInstance}fromdeclaremodule{interfaceVue$axios:}}importimportVueRouterfrom"vue-router";import{Store}from"vuex";declaremodule{interfaceComponentOptions<Vextends{router?:VueRouter;store?:}屬性exportdefaultclassoWorldextendsVue//Props()參數是為vue提供屬性//!稱為明確賦值斷言,它是提供給ts@Prop({type:String,required:true})privatemsg!:string;}新增特性時派發通知,////通知父類新,若未指名則函數名作 名(羊肉串形式privateaddFeature(event:any){//若沒有返回值形參將作 參constfeature={name:event.target.value,id:this.features.length+1};event.target.value=returnfeature;//若有返回值則返回值作 參}onMsgChange(val:string,oldVal:any){console.log(val,}vuex-class為 npmnpmivuex-class-使用,<h3<h3<h3import{Action,State}from"vuex-exportdefaultoextends{@Statecounter!://add即是type,類型是函數且無返回值@Mutationadd!:()=>void;//add仍是type,但是會和上面重名,需//類型是函數返回值是@Action("add")asycAdd!:()=>}裝飾器是工廠函數,它能和修改functionlog(target:Function){//target是構造函數console.log(target===Foo);//totype.log=function(){}}class{bar=}constfoo=new//@ts-方法裝飾functionfunctiondong(target:any,name:string,descriptor:any)//這里通過修改descriptor.value擴展了bar方法constbaz=descriptor.value;descriptor.value=function(val:string){baz.call(this,val);}return}class{@dongsetBar(val:string){this.bar=}}屬性裝飾////屬性裝飾functionmua(target,{target[name]=}classFoo@mua}稍微改造一下使其可以接收functionfunctionmua(param:string){returnfunc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設備保管使用協議書
- 共同成立子公司協議書
- 保潔員簽到合同協議書
- app商城代理協議書
- 花草修剪合同協議書
- 門市出租調價協議書
- 船舶買賣交接協議書
- 門市租房安全協議書
- 南寧房地產合作協議書
- csc公派留學協議書
- 2025年軟件測試工程師考試題及答案
- 血管內導管相關性血流感染預防與診治指南(2025)解讀課件
- 2025年高考數學考前最后一課
- 茶葉加工考試題及答案
- 跨學科實踐制作微型密度計人教版物理八年級下學期
- 2025屆高考語文作文備考之審題立意30道選擇題訓練(附答案)
- 21. 三黑和土地 課件
- 挖掘機理論試題及答案
- 2025年銀行從業資格考試個人理財真題卷權威解讀
- 興安盟2025年興安盟事業單位春季專項人才引進30人筆試歷年參考題庫附帶答案詳解
- 西部計劃考試試題及答案
評論
0/150
提交評論