typescript中的類型推論


使用 typescript 時,在一些定義中如果你沒有明確識指定類型,編譯器會自動推斷出合適的類型,比如:

let str = 'hello'
str = 123 // error,不能將類型“123”分配給類型“string”

可以看到,定義變量 str 時並沒有指定它的類型,而是直接賦值一個字符串,當再給它賦一個數值時就會報錯。這里 typescript 就根據我們賦給 str 的值的類型,推斷出我們的  str 的類型,是字符串類型,所以不可以將數值類型賦給它。

這個就是最基本的類型推論,根據右側的值推斷左側變量的類型。

 

多類型聯合

當我們定義一個數組或者元組這種包含多個元素的值的時候,多個元素可以有不同的類型,這時候 typescript 會將多個類型合並起來,組成一個聯合類型,例如:

const arr = [1, 'a']
arr.push(false) // error,類型“false”的參數不能賦給類型“string | number”的參數

此時的 arr 的元素被推斷為 string | number,也就是元素可以是 string 類型也可以是 number 類型,除此之外的類型是不可以的。再一個例子:

let value = Math.random() * 10 > 5 ? 123 : 'abc'
value = false // error,不能將類型“false”分配給類型“string | number”。

value 的值是隨機的,但是只能是 string 或者 number,它的類型被推斷出是 string | number,所以不能賦值 false。

 

上下文類型

前面講的例子都是根據 = 符號右邊值的類型,推斷出左側變量的類型。現在還有一種是根據左側的類型推斷右側的類型,這就是上下文類型。官網的例子:

window.onmousedown = function(mouseEvent) {
  console.log(mouseEvent.button);  // error,mouseEvent 上不存在屬性 button
};
表達式左側是 window.onmousedown (鼠標按下時發生事件),因此 TypeScript 會推斷賦值表達式右側函數的參數是事件對象,且是 MouseEvent。在回調函數中使用 mouseEvent 的時候,你可以訪問鼠標事件對象的所有屬性和方法,當訪問不存在屬性的時候,就會報錯。

 

 

 


免責聲明!

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



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