TypeScript徹底解讀(26課時)_19.其餘重要更新


ts3.3升級過來有不少重要的更新
無法歸類的更新,在本節課幾種講一下
建立update.ts,而後在index.ts內引入ios

async和promise

es6中增長了promise的支持,可以很好處理異步的邏輯,讓他同步執行
按順序執行,會先執行下面的輸出2,1秒後纔會輸出1

有的時候想保證操做的順序,使用promise,在settimeout裏面執行完成後調用 resolve()方法,
想讓它在輸出1後再輸出2,那麼使用.then方法在裏面輸出2

把結果返回,就在resolve裏面傳值a過去,在then裏面接收參數res就是,resolve傳過來的參數


若是遇到一些異常的狀況,就調用reject方法,傳如一個錯誤對象,而後用catch去接收錯誤對象,並輸出

ts1.6版本開始async和await語法糖
也是在1秒後打印出來的,await就是promise的語法糖

若是想捕獲異常狀況的話,就須要把代碼包在try catfch裏面

在看一下實際的比較複雜的例子,通常在實際的開發都是用axios的庫,這裏爲了演示,再也不引入asiox的庫了

定義接口用來規範返回的結果,要求返回的結果都包含data這麼個屬性,裏面能夠有任意多的字段,類型是any

而後再定義命名空間,在裏面封裝一些方法,模擬發post請求,返回的結果是Promise,結果類型是咱們定義的接口Res定義的內容

經過setTimeOut來模擬異步請求操做

再定義一個發送請求的函數,使用解構賦值的形式來接收參數

指定這個對象,實現info接口

使用try catch接收正常的結果和異常狀況,用axios.post方法來模擬異步的請求,axios就是咱們定義的namespace,post就是在這namespace裏面導出的方法

這是請求的時候發送的參數

解構賦值的形式,對參數進行解構,在下面直接拿來用

這裏是簡寫,由於屬性名和屬性值都是相同的,因此能夠簡寫

最後面打印出來3, 而且返回res這個結果,而後在catch裏面拋出異常的錯誤。

再定義一個getRoleReq方法,先去登錄獲取user_id,而後再調用獲取第二個接口,傳入user_id獲取角色的id
注意後面必定要return res
調用方法,使用解構的方式調用這個結果

接口改個名字,可能和別的地方有衝突了。



首先調用loginReg,這裏先輸出了1,而後中間部分調用login的請求,輸出了2,最後輸出了3

這是調用的中間的接口部分,輸出的2

接口這裏的時間一直沒加,在這裏也加上

拿到結果後,這個user_id再傳給下面的值,調用getRoleReq方法,拿到他的角色信息

使用async和await看起來更簡潔一些,可是須要封裝一個函數,await只能在async封裝的函數內使用,因此你若是使用swait的話,外面必須有個函數必須包着es6

ts.config註釋

js文件裏面是不容許有註釋的,它對格式要求比較嚴格,在ts1.8版本開始就能夠在ts.config.josn裏面就能夠寫註釋
可使用 // 單行註釋,或者是 /* 內容 */ 多行註釋axios

動態導入表達式

ts在2.4的版本之後支持動態引入
在es6標準的模塊裏面,你用import引入的模塊在編譯階段就引入了,經過ts提供的動態表示呢就能夠按需的加載
在import以前加上await來實現動態導入數組

弱類型探測

任何值,包括可選的屬性,均可以當作是弱類型
定義接口,包含一個name字段,咱們標記它是一個可選的屬性,再定義一個可選的age,全部字段都是可選的 那麼它就是一個弱類型

ts2.4版本開始。給弱類型賦值



使用類型斷言,就沒有問題了promise

...三個點操做符

ts3.2版本以前只能做用於對象類型,對擴展運算符作了優化

...會把傳入的op1的全部屬性扁平化,至關於把傳入的op1和op2的全部屬性都拿出來 最終返回組合後的數組

ts3.2版本後,能夠在泛型中使用拓展運算符

打印出來有一個屬性a 值是a ,第二個op2值是name

等同於解構賦值的這種寫法

還能夠從泛型變量中解析reset的結果
這樣就要求你傳進來的對象必須有props這個屬性名

這裏使用解構賦值來接收,這樣就表示你這個對象裏面有props這個屬性

而後再用rest接收剩餘的屬性,最後返回去這個rest

打印的結果只有name和age這兩個屬性,把props給去掉了

rest就是接收的除了rest之外的全部屬性,就是剩餘屬性組成的對象

 異步

相關文章
相關標籤/搜索