<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Typescript高級(jí)技巧-基本類(lèi)型中的const

          共 1381字,需瀏覽 3分鐘

           ·

          2023-01-07 00:11


          使用對(duì)象初始化變量時(shí),TypeScript 認(rèn)為該對(duì)象的屬性是可以被更改的。例如,如果您編寫(xiě)了這樣的代碼:

          const obj = { counter: 0 };if (someCondition) {  obj.counter = 1;}


          TypeScript 不會(huì)認(rèn)為把 counter 從0改為1是錯(cuò)誤的,只要 counter 符合數(shù)字類(lèi)型就可以。

          function handleRequest (url: string, method: 'GET' | 'POST') {}
          const req = { url: "https://example.com", method: "GET" };handleRequest(req.url, req.method);// 類(lèi)型“string”的參數(shù)不能賦給類(lèi)型“"GET" | "POST"”的參數(shù)。ts(2345)

          在上面的示例中,req.method 被推斷為字符串,而不是“GET”。TypeScript認(rèn)為這段代碼有錯(cuò)誤。


          有兩種方法可以解決這個(gè)問(wèn)題。

          您可以通過(guò)在以下任一位置添加類(lèi)型斷言來(lái)更改推導(dǎo)的類(lèi)型:

          // Change 1:const req = { url: "https://example.com", method: "GET" as "GET" };// Change 2handleRequest(req.url, req.method as "GET");


          更改1意味著“我希望 req.method 始終具有文本類(lèi)型“GET”,從而防止在之后將“GUESS”分配給該字段。更改2意味著“我知道出于其他原因,req.method 具有值“GET”。


          可以使用常量將整個(gè)對(duì)象轉(zhuǎn)換為基本值作為其類(lèi)型:

          const req = { url: "https://example.com", method: "GET" } as const;handleRequest(req.url, req.method);


          as const 后綴的作用類(lèi)似于 const,但對(duì)于類(lèi)型系統(tǒng),確保所有屬性都分配了文字類(lèi)型,而不是更通用的基礎(chǔ)類(lèi)型,如字符串或數(shù)字。


          這個(gè)最簡(jiǎn)單的聲明,Typescript 會(huì)推斷出 age 的類(lèi)型是 number,你可以對(duì)它賦任何數(shù)值。

          let age = 30// age類(lèi)型為number


          但如果我們使用const聲明這個(gè)變量,它的類(lèi)型會(huì)變成什么?

          const age = 30// age類(lèi)型為30

          可以看到 30 就變成它的類(lèi)型,而且再也無(wú)法更改。字符串也一樣,會(huì)有這種限制。


          如果對(duì)一個(gè)數(shù)組使用 const 定義,情況就有點(diǎn)不一樣了,看下面的例子。它只是定義了 cars 為字符串?dāng)?shù)組類(lèi)型,你還是可以對(duì)數(shù)組進(jìn)行各種操作,比如插入一個(gè)數(shù)組元素之類(lèi)的。

          const cars = ['A', 'B', 'C']// cars類(lèi)型為string[]


          如果你想限定死數(shù)組,那就需要加 as const, 如下:

          const cars = [1, 2, 3, 4, 5]// cars類(lèi)型為readonly ["A", "B", "C"]


          對(duì)象和數(shù)組差不多,如果直接 const 定義,你還是可以直接修改對(duì)象的字段,除非加入 as const,這樣它會(huì)給每個(gè)字段加入 readonly, 并且使用基本值作為其類(lèi)型。


          瀏覽 92
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品自产拍在线观看 | 国产av佳作老友重逢 相干恨晚 | 欧美在线视频99 | 三级av二区 | 日本国产视频 |