TS之類型推論、聯合類型、類型斷言


1.類型推論

TS中,沒有明確指出類型的地方,類型推論會幫助提供類型。如下面的例子:

let x = 3

這里的x就被推斷為數字,這種推斷發生在初始化變量和成員,設置默認參數值和決定參數返回值時。 

如果要從幾個表達式中推斷類型的時候,會使用這些表達式的類型來推斷出一個最合適的通用類型。例如:

let x = [0, 1, null];

 為了推斷x的類型,我們必須考慮所有元素的類型。 這里有兩種選擇: numbernull。 計算通用類型算法會考慮所有的候選類型,並給出一個兼容所有候選類型的類型。

2.聯合類型

當一個變量的屬性無法確定的時候就可以用到聯合類型(union type)。如:

let nOs: number | string

nOs = 123
nOs = "abc"

 

上面代碼表示nOs這個變量的類型可以是number或者是string。

注意的是,如果TS不確定一個聯合類型的變量是哪個類型的時候,只能訪問此聯合類型的共有的屬性/方法。如:

 

這里只有number和string類型共有的這三個方法供選擇。

3.類型斷言

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
  }
}
// 不能斷言成一個不存在的類型

let nl = getLength(123)
let sl = getLength("abc")

 

上面代碼使用as關鍵字手動將str變量斷言為string和number屬性。且不能斷言成一個不存在於參數中定義的類型。

上面功能還可以使用typeof關鍵字來實現:

function getLength(input: string | number): number {
  const str = input as string
  if (typeof input === "string") {
    return input.length
  } else {
    return input.toString().length
  }
}

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM