<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] # 類型別名,字面量 和 交叉類型 本章節 **查漏補缺** ,講一些零碎的小 **概念** 。 >[success] ## 類型別名(type aliase) **類型別名**: 聽名稱就很好理解,就是**給類型起一個別的名字** 。 1. **約束函數** 例子:比如說有一個 **[函數類型](http://www.hmoore.net/wangjiachong/vue_notes/2165549)** ,要多次用到這個 **函數類型(等號左側是函數類型)** ,就要 **多次聲明同樣的函數類型** ,就會很累,產生相同不必要的代碼,如下: **index.ts** ~~~ // let 函數名稱: 函數類型 = 函數函數內部邏輯代碼 let sum1: (x:number, y:number) => number = (x:number, y:number):number => x + y // 使用函數 const result1 = sum1(1, 2) // 下面的函數中再次聲明了 (x:number, y:number) => number // 再次聲明【函數類型】 let sum2: (x:number, y:number) => number = (x:number, y:number):number => x * y // 使用函數 const result2 = sum2(3, 2) ~~~ 上面的代碼中 **多次聲明了函數類型** ,此時我們可以使用 **type** 關鍵字來創建一個 **類型別名** ,來解決這個問題,代碼如下: **index.ts** ~~~ // 用type關鍵字,創建【類型別名】 type PlusType = (x:number, y:number) => number // 使用【類型別名】創建函數 let sum1: PlusType = (x:number, y:number):number => x + y // 使用函數 const result1 = sum1(1, 2) // 使用【類型別名】創建函數 let sum2: PlusType = (x:number, y:number):number => x * y // 使用函數 const result2 = sum2(3, 2) ~~~ 我們也可以使用 [Interface 約束函數](http://www.hmoore.net/wangjiachong/vue_notes/2165549) ,效果是一樣的。 2. **約束變量** **index.ts** ~~~ // 用【類型別名】來【約束聯合類型】 type StrOrNumber = string | number // 使用類型別名 let result:StrOrNumber = 123 // 賦值成字符串 result = '哈哈哈' ~~~ 如果賦值成 **Boolean** 類型值的話,就會報錯。 >[success] ## 字面量 **字面量** 是一個**特殊的類型** ,這個類型只能是 **原始數據類型** ,舉個例子,下面代碼中 **約束的類型是字符串name,值也只能等于name,約束的類型是1,值也只能等于1** ,不然會報錯。 **index.ts** ~~~ const str: 'name' = 'name' const number: 1 = 1 ~~~ **字面量** 應用場景是什么?我們經常會使用 **枚舉(Enum)** 來儲存 **常量值(比如說我們四個方位:上、下、左、右)** ,而 **字符串** 、 **字面量** 是用這種簡單的方式,來處理這種情形,如下: **index.ts** ~~~ // 用【類型別名】定義【字符串類型】 type Directions = 'Up' | 'Down' | 'Left' | 'Right' // 使用【字符串類型】做【字面量】 let toWhere: Directions = 'Down' ~~~ **編輯器圖片**: ![](https://img.kancloud.cn/b3/7b/b37ba4270674077e451045eac273da12_497x227.png) 這樣寫有一個好處,它會把 **類型限定在里面,并且在編輯器上會有提示** ,非常方便 。 >[success] ## 交叉類型 **或(符合: | )** 在 **ts** 中叫 **聯合類型** ,有一個與他相對應的類型,**和(符合: & )** 叫做 **交叉類型** ,在 **ts** 中使用代碼人如下: ~~~ // 定義接口 interface IName { name: string } // 定義類型別名 type IPerson = IName & { age: number } // 定義對象 let person:IPerson = { name: '小明', age: 18 } ~~~ **對象** 中必須要有 **name** 與 **age** ,否則報錯,它跟 **接口(interface)** 的 **繼承(extends)** 非常相似,它們都是為了 **實現對象形狀的組合和擴展** 。 >[success] ## 接口(interface) 與 類型別名(type) 該用哪個? 我們講一下什么時候使用 **interface** 什么時候使用 **type** 。 1. **類型別名(type)** :**type** 作為 **類型別名** ,是一種非常靈活寬泛的概念, **它不是一種特殊的類型,只是別的類型的一個別名** ,有點像 **快捷方式** ,**當你要使用交叉類型時,可以考慮使用type** 。 2. **接口(interface)** :**接口(interface)** 是一種獨特的類型,當你要實現 **extends** 或者實現 **類(Class)** 的 **implements** 時,可以考慮使用 **接口(interface)** 。
                  <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>

                              哎呀哎呀视频在线观看