<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國際加速解決方案。 廣告
                [TOC] >[success] # 類型推論 聯合類型和 類型斷言 本章的名字看著非常的拗口,感覺很難理解,其實不是的,只是這 **3** 個東西非常適合在一起講解。 >[success] ## 類型推論 從上一章,我們講過,**當我們把一個變量賦值一個函數時,變量會自動獲取數據的類型,鼠標指向變量時就可以看到變量的類型,這是因為類型推論的原則,它可以推斷出我們賦值的過程中,這個變量,它應該是一個什么類型的** ,舉個例子: 我們 **定義一個普通的變量,不定義類型,它也不會報錯** **basic-types.ts** ~~~ let str = 'str' ~~~ 但是一旦賦值成 **number 類型** 時就會報錯 ![](https://img.kancloud.cn/26/ae/26ae791917212013b9f1c39d3dcb116c_455x115.png) 因為 **Typescript** 在 **沒有明確指定類型時,會推測出一個類型** ,這就是我們所說的 **類型推論** ,算是 **Typescript** 為我們提供的一個幫助。 >[success] ## 聯合類型 我們倒回去說一下 **any 類型** ,**any** 是一個大而全的 **類型** ,不到萬不得已,不會使用它,但是現在還有一種情況,它的 **類型范圍** 不是特別廣泛,只允許 **一部分類型** , **比如說一個變量可以是 string 、number ,其他類型則不行** ,這種時候我們可以使用 **聯合類型** **basic-types.ts** ~~~ // 聯合類型 let numberOrString: number | string numberOrString = 'abc' numberOrString = 123 ~~~ >[success] ## 類型斷言 上面的代碼中 **numberOrString** 這個 **變量** 有 **2** 種 **類型** ,既可以是 **number** 也可以是 **string** ,所以在編譯器中打 **numberOrString.** 時,**它會自動彈出 字符串與數字提供的一些方法,但是有一些方法它不會彈出來,例如:字符串是有 length 這個屬性的** , **鼠標指向變量時, length 沒有彈出來**,這個時候我們就需要使用 **類型斷言** ,**Typescript 斷言:用來告訴編譯器,你比它更了解這個類型,并且它不應該再發出錯誤** ,這時候我們可以使用 **as 關鍵字,告訴編譯器,你無法判斷我的代碼,但是我本人很清楚** **basic-types.ts** ~~~ // 類型斷言 function getLength(input:string | number):number { const str = input as string if(str.length){ return str.length } else { const number = input as number return number.toString().length } } ~~~ 注意: **類型斷言** 不是 **類型轉換** ,把它 **斷言成聯合類型中不存在的類型會出錯的** 。 當 **遇到聯合類型時,使用條件語句可以自動幫你縮小類型的范圍** **basic-types.ts** ~~~ // type guard function getLength2(input:string | number):number { if(typeof input === 'string'){ return input.length } else { return input.toString().length } } ~~~
                  <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>

                              哎呀哎呀视频在线观看