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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                >[success] # 使用unknown 還是 any ~~~ 1.區別一:any即是top type(任何類型都是他的subtype)又是 bottom type(他是任何類型的subtype), 簡單說就是 '任何類型的值賦值給 any 類型的變量','可以把 any 類型的值賦值給任意類型(除 never 以外)的變量', unknown是個top type(任何類型都是他的subtype),'可以把任何類型賦值給unknown','但只能給unknown和any 類型賦值給unknown' 2.區別二:unknown 和 any 的主要區別是 unknown 類型會更加嚴格,在對unknown類型的值執行大多數操作之前,我們必須進行某 種形式的檢查,而在對 any 類型的值執行操作之前,我們不必進行任何檢查。 ~~~ >[danger] ##### 區別一 案例 ~~~ let strAny:any = "1" let num:number = 1 let boolean = true // 任何類型可以賦值給any -- top type strAny = num // any 可以賦值給任何類型 -- bottom type boolean = strAny // -------------unknown ---------------------- let strAny:unknown = "1" let num:number = 1 let boolean = true // 任何類型可以賦值給unknown -- top type strAny = num // unknown 只能賦值給unknown 和any 類型 boolean = strAny // 報錯 ~~~ * unknown 報錯 ![](https://img.kancloud.cn/ae/36/ae36e709b4fda647bb92a0cf9779fbc8_523x215.png) >[danger] ##### 區別二 案例 ~~~ let value: any value.foo.bar // OK value() // OK new value() // OK value[0][1] // OK let value1: unknown value1.foo.bar // ERROR value1() // ERROR new value1() // ERROR value1[0][1] // ERROR ~~~ * 它就可以縮小類型范圍更加安全 ~~~ 1.下面案例如果參數是any 則不用if 判斷用來縮小范圍也不會報錯,但是使用了'unknown' 你必須要更加精確縮小范圍 使用才不會報錯 ~~~ ~~~ function getValue(value: unknown): string { if (value instanceof Date) { // 這里由于把value的類型縮小為Date實例的范圍內,所以`value.toISOString()` return value.toISOString(); } return String(value); } ~~~ ~~~ // 不會報錯但是如果是unknown 會報錯 function getValue(value: any): string { return value.toISOString(); } ~~~ >[info] ## 指鹿為馬 ~~~ 1.下面案例想解決'let horse = deer as Horse // 報錯' 問題有兩種方法 1.1.let horse = deer as any as Horse 1.2.let horse = deer as unknown as Horse 需要向上轉型在向下指定,相對來說兩種雖然都可以但是 'any' 相當于直接暴力通過類型檢查,打這張牌要警惕。 'unknown' 是所有類型的父類型,想強行 as 的時候更建議打這張牌。 ~~~ ~~~ interface Deer { deerId: number } // 這是馬 interface Horse { horseId: number } // 牽出一只鹿 let deer: Deer = { deerId: 0 } // 這樣會報錯,沒法直接指鹿為馬 let horse = deer as Horse // 報錯 ~~~ >[info] ## 總結 ~~~ 1.'unknown' 是更安全的 'any', 'any' 由于過于靈活的設定,導致它與 'JavaScript' 沒有太多區別,很容易產生低級錯誤 向案例一展示一樣'unknow' 并不是可以賦值給任何類型的這樣不會導致不確定性,并且案例二的展示也可以看出, 當 unknown 類型被確定是某個類型之前,它不能被進行任何操作 因此多用'unknown' 少用'any' ~~~ >[info] ## 參考文章 [# \[譯\] TypeScript 3.0: unknown 類型](https://juejin.cn/post/6844903866073350151) [TypeScript 的 any 和 unknown 有什么區別,使用它們的最佳實踐是怎樣的?](https://www.zhihu.com/question/355283769)
                  <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>

                              哎呀哎呀视频在线观看