<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                >[success] # ts -- 類型擴展和類型縮小 ~~~ 1.字面量章節時候發現let 在沒有定義類型時候會自動向上找對應的父級類型,但最終還是屬于同一類型之間的升級 2.另外一種是類型擴展即類型升級到其他類型 其中'null' 和'undefined' 兩個為代表 3.相對的有擴展類型就是有縮小類型范圍,將大類型集合逐步精準到小類型上這種就叫'類型縮小' ~~~ >[danger] ##### 類型擴展 ~~~ 1.通過 let、var 定義的變量如果滿足未顯式聲明類型注解且被賦予了 null 或 undefined 值,則推斷出這些變量的類型是 any ~~~ ~~~ let x = null // 類型拓寬成 any let y = undefined // 類型拓寬成 any ~~~ ![](https://img.kancloud.cn/4d/12/4d12d54d8455867ec18eb536309343e4_379x116.png) * const 不吃這一套 ~~~ const z = null // 類型是 null ,const 會字面量找到自己當前的 ~~~ * let定義值被賦值(strictNullChecks=true 被開啟) ~~~ let x = null // 類型拓寬成 any let x2 = x // 類型是 null 開啟后賦值 ~~~ ![](https://img.kancloud.cn/ca/c6/cac68f0b35a352d78f83c8430c1f518a_453x122.png) >[danger] ##### 縮小類型 ~~~ 1.雖然function 接受的參數是any 但是通過if 流程語句縮小了范圍,最后func 推導的返回類型不在是any 而是更準確的聯合類型 當然除了if 類似或其他控制流語句(三目運算符、switch 分支)等都可以 ~~~ ~~~ let func = (anything: any) => { if (typeof anything === 'string') { return anything // 類型是 string } else if (typeof anything === 'number') { return anything // 類型是 number } return null } ~~~ ![](https://img.kancloud.cn/79/28/792804fed2a6cfdb29871bde6d42ab35_575x256.png) * 案例 ~~~ type Goods = 'pen' | 'pencil' | 'ruler' const getPenCost = (item: 'pen') => 2 const getPencilCost = (item: 'pencil') => 4 const getRulerCost = (item: 'ruler') => 6 const getCost = (item: Goods) => { if (item === 'pen') { return getPenCost(item) // item => 'pen' } else if (item === 'pencil') { return getPencilCost(item) // item => 'pencil' } else { return getRulerCost(item) // item => 'ruler' } } ~~~ ![](https://img.kancloud.cn/cb/99/cb9982b57f57b684d4d3c8084f0028a1_567x466.png) * 案例 ~~~ const getCost = (item: Goods) => { if (item === 'pen') { item; // item => 'pen' } else { item; // => 'pencil' | 'ruler' } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看