<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                >[success] # 案例場景 導讀 ~~~ function getParams(params:unknown){ return params } // 雖然傳入的參數是字符,確定知道返回類型也是字符串,但實際類型推導是unknown // 并不能將unknown 根據傳入參數實時推導 getParams("1") ~~~ ![](https://img.kancloud.cn/b0/da/b0da7dc7e6071d4d32c0e638ac21243e_792x185.png) * 使用聯合類型來改造 ~~~ function getParams(params:string|number){ return params } // 但是相對的類型也為聯合類型 getParams("1") ~~~ ![](https://img.kancloud.cn/9a/2a/9a2a028e1478ccce6f261ab43cd8258d_749x192.png) * 使用函數重載 -- 完美解決現在問題 ~~~ function getParams(params: number):number function getParams(params: string):string function getParams(params: unknown) { return params } getParams('1') ~~~ ![](https://img.kancloud.cn/0f/45/0f4546466a0c46ea14e66ae99e40e239_612x187.png) >[success] # 什么是泛型 ~~~ 1.泛型(Generics)是指在定義函數、接口或類的時候,不預先指定具體的 類型,而在使用的時候再指定類型的一種特性。 2.泛型指的是類型參數化,即將原來某種具體的類型進行參數化。和定義函數參數一樣,我們可以給泛型定義 若干個類型參數,并在調用時給泛型傳入明確的類型參數。設計泛型的目的在于有效約束類型成員之間的關系, 比如函數參數和返回值、類或者接口成員和方法之間的關系。 3.也就是說在使用時候可以規定類型,讓其動態起來,來解決上面的問題 ~~~ >[info] ## 泛型用法 ~~~ 1.通過尖括號 <> 語法給函數定義一個泛型參數例如指定參數為T,在將T指定到要規定參數類型的參數,例如將上面實現 通過泛型表現 ~~~ ~~~ function getParams<T>(params: T):T { return params } getParams<number>(1) getParams<number>("1") // 報錯因為已經指定的類型為number了 ~~~ >[danger] ##### 使用的時候 -- 指定類型可缺省 ~~~ function getParams<T>(params: T):T { return params } // 根據傳入參數類型自動推斷了 省略了指定類型 getParams("1") ~~~ ~~~ function reflectArray<P>(param: P[]) { return param; } const reflectArr = reflectArray([1, '1']); // reflectArr 是 (string | number)[] ~~~ >[danger] ##### 泛型傳入多個不同類型參數 ~~~ 1.泛型傳入多個不同類型參數 ~~~ ~~~ function getArray<T,U>(value1:T,value2:U,items:number = 5):Array<[T,U]>{ return new Array(items).fill([value1,value2]) } getArray("1",1,1).forEach((items)=>{ console.log(items[0].length) console.log(items[1].length) // 幫我們自動檢測數字沒有length 屬性 }) ~~~ ~~~ function reflectExtraParams<P, Q>(p1: P, p2: Q): [P, Q] { return [p1, p2]; } ~~~
                  <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>

                              哎呀哎呀视频在线观看