1.類型推論
TS中,沒有明確指出類型的地方,類型推論會幫助提供類型。如下面的例子:
let x = 3
這里的x就被推斷為數字,這種推斷發生在初始化變量和成員,設置默認參數值和決定參數返回值時。
如果要從幾個表達式中推斷類型的時候,會使用這些表達式的類型來推斷出一個最合適的通用類型。例如:
let x = [0, 1, null];
為了推斷x
的類型,我們必須考慮所有元素的類型。 這里有兩種選擇: number
和null
。 計算通用類型算法會考慮所有的候選類型,並給出一個兼容所有候選類型的類型。
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 } }