TypeScript入門 列舉 型別推論

2021-09-25 20:21:14 字數 1692 閱讀 8504

使用列舉可以定義一些具有名字的數字常量,和在c語言中一樣都是使用關鍵字enum

enum direction

注意:乙個列舉型別可以有多個列舉成員,每個列舉成員都有乙個對應的數字值,這個數字值可以是常數或者是計算得出的值。當滿足下列條件時,列舉成員的數字值被認為是常數

例如:

enum direction

注意:在列舉型別中每個列舉成員對應的數字值必須是唯一的,不能重複。如果有重複,則會取最後乙個

enum direction 

console.log(direction.down); //3

console.log(direction[3]); //

center

列舉型別中是包含雙向對映的,即(value -> name)和(name -> value)

console.log(direction.down); //

3console.log(direction[3]); //

down

當訪問列舉值時,為了避免生成多餘的**和間接引用,可以使用常數列舉。 常數列舉是在enum關鍵字前使用const修飾符。

常數列舉只能使用常數列舉表示式並且不同於常規的列舉的是它們在編譯階段會被刪除。 常數列舉成員在使用的地方被內聯進來。 這是因為常數列舉不可能有計算成員。

const enum direction

typescript裡,在有些沒有明確指出型別的地方,型別推論會幫助提供型別

let x = 'qwe';

變數x的型別被推斷為string。 這種推斷發生在初始化變數和成員,設定預設引數值和決定函式返回值時

有時需要從多個型別中推斷,這時會根據這些型別推斷出乙個最合適的通用型別

let x = [0, 1, null];

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

但是有時沒有乙個型別能夠作為所有候選型別的型別,如果沒有找到最佳通用型別的話,型別推論的結果是空物件型別,{}。 因為這個型別沒有任何成員,所以訪問其成員的時候會報錯。

一般要明確的指出型別

typescript型別推論也可能按照相反的方向進行。 這被叫做「按上下文歸類」。按上下文歸類會發生在表示式的型別與所處的位置相關時。

上下文歸類會在很多情況下使用到。 通常包含函式的引數,賦值表示式的右邊,型別斷言,物件成員和陣列字面量和返回值語句

window.onmousedown = function

(mouseevent) ;

之所以會報錯,是因為型別檢查器會根據賦值號=右邊來推斷引數mouseevent的型別

如果上下文型別表示式包含了明確的型別資訊,上下文的型別被忽略。 重寫上面的例子:

window.onmousedown = function

(mouseevent: any) ;

這個函式表示式有明確的引數型別註解,上下文型別被忽略。 這樣的話就不報錯了,因為這裡不會使用到上下文型別

JAVA列舉類入門

乙個簡單列舉類的例子 public enum light public string tostring 列舉類常用的方法 valueof方法 與tostring相對應。values方法 返回列舉量,可用於遍歷所有列舉值。ordinal方法 返回列舉值在列舉類中的順序,根據列舉值宣告的順序確定。使用列...

TypeScript入門須知

1.強型別語言 不允許改變變數的資料型別,除非進行強制型別轉換 2.弱型別語言 變數可以被賦予不同的資料型別 3.靜態型別語言 在編譯階段確定所有的變數型別 4.動態型別語言 在執行階段確定所有的變數型別 1.初始化 npm init y 2.全域性安裝ts cnpm i typescript g ...

TypeScript 入門(二) 函式

一 函式定義 1 先看一下es5中定義函式 function fn 匿名函式 var fn1 function 2 在ts中定義函式 function fn string 匿名函式 var fn1 function string 二 函式的傳參 1 ts中函式的傳參 function show na...