Typescript - 變量類型


原文:TypeScript基本知識點整理

 

一、number

let num1 : number = 20;
let num2 : number = 175.5;
let a1 : number = Infinity; //正無窮大
let a2 : number = -Infinity; //負無窮小
let a3 : number = NaN;

   這和 js 一樣,Infinity、-Infinity、NaN 也是屬於 Number 類型的;

 

二、undefined

let un : undefined = undefined;

  在 ts 中,undefined 也是單獨的數據類型,如上。需要注意的是,undefined類型的變量不能被賦值成其他類型,“undefined 類型的數據只能被賦值為 undefined”。

// 報錯,不能編譯
let un: undefined;
un = 5;

 

三、null

let nu : null = null;

  同上,null 類型的變量只能賦值為 nul。

  null 是一個空指針對象, undefined 是未初始化的變量,所以可以把 undefined 看成一個空變量, 把 null 看成一個空對象。

特別注意:在 ts 中, null 和 undefined 類型,是所有其他類型的子類型,即,這哥倆可以被賦值給所有其他類型,並且被賦值后在賦值原來數據類型的數據不會報錯...

// 不會報錯,成功編譯
var un = 5;
un = null;
un = 6;

 

四、string 類型

//值類型
let str : string = '你好!'
//引用類型
let str1 : String = new String('你好!')

 

五、boolean 類型

let boo : boolean = true;
let boo1 : boolean = false

 

六、symbol 類型(js 在 es6 版本拓展的新的基礎數據類型)

let sy : symbol = Symbol('bar');

  和 js 一樣,構造這個數據類型的時候只能通過如上的 Symbol 構造函數創建。

 

七、數組 類型

//字面量
let arr1 : number[] = [1, 2]

//泛型---->相當於數組中每個元素的類型
let arr2 : Array<string> = ['a', 's']

//構造函數
let arr3 : string[] = new Array('a', 's')

//聯合類型-->這里的聯合類型的意思是,數組中元素的類型可以是number 或 string,兩種都有也可以
let arr4 : Array<number | string> = [2, 'a', 3, 'b', ...]

 

八、元組 類型(tuple)

  這是 ts 特有的數據類型,先看示例:

let tup : [string, number] = ['asdasd', 43233];

  初看上去,和數組看起來有點類似,但是,是由區別的:元組類型由長度限制,並且每一個位置上的數據類型一一對應,如上例中 tup 數組長度只能是 2,且 tup[0] 必須是 string 型,tup[1] 必須是 number 型,這三點是區別於數組的聯合類型的地方

 

九、枚舉 類型(enum)

  枚舉類型是個蛋碎一地的類型,這里只記錄常用的,研究細節還請移步:Typescript - 枚舉

數字枚舉:

enum REN {
    // nan = 1 ----->初始化下標
    nan,
    nv,
    yao
}
console.log(REN.nan)//0
console.log(REN.nv)//1
console.log(REN.yao)//2
//使用數字枚舉時,TS 會為枚舉成員生成反向映射
console.log(REN[2])// yao

  當然,數字枚舉的下標默認從 0 開始,也可以自行設置成員的初始值,他們會自行遞增。

字符串枚舉:

enum SIJI {
    chun = '春',
    xia = '夏',
    qiu = '秋',
    dong = '冬'
}

console.log(SIJI.chun)//春
console.log(SIJI.xia)//夏
console.log(SIJI.qiu)//秋
console.log(SIJI.dong)//冬

  字符串枚舉不支持成員自增長,每個成員必須要初始化,且字符串枚舉不會為成員生成反向映射。

 

十、void 類型

  表示沒有返回值,一般用於方法(function)中。

// es 5
function fn() : void {
    console.log('...')   
}

// es6
() : void => {
    console.log('...')   
}

  這里,我們也可以指定函數的返回值為 undefined。因為在 js 中,如果函數沒有返回值,則會默認返回 undefined。不過,使用 void 類型可以使表意更清晰。

 

十一、 any 類型

  any 類型是一個最通用的類型,其他類型都是 any 的子類型,因此,any 類型可以被賦值成任何類型的值。

let an : any = 'any 類型';
console.log(an)//any 類型
an = 25;
console.log(an)//25

 

  關於 any 有兩點需要注意:

  1)如果在聲明變量時,沒有聲明其類型,也沒有初始化,那么在 ts 做類型推斷的時候會被判斷成 any 類型。

  2)在 any 類型上可以訪問任何屬性,即使這個屬性對於某些數據類型不存在:

let something: any = 42
something.mayExist()    // 沒問題,因為其可能在運行時存在
something.toFixed() // 沒問題,雖然確實存在,但是編譯器並不會去檢查

 

十二、never 類型

  never 類型表示永遠不會存在的值的類型,常用於描述函數。never 是任何類型的子類型,never 沒有人資類型,即 never 是最后一層,因此,never 型的數據只能被賦值成 never 型。

 

never 類型通常用於兩種情況:

1.用來描述拋出錯誤的函數:

function fn(msg : string) : never {
    throw new Error(msg)
}

 2.函數中存在無法到達的終點,如死循環:

function fn() : never {
    while (true) {
         // do something
     }
 }

 

十三、日期 類型

let da : Date = new Date()
console.log(da)

 

十四、正則 類型

//構造函數聲明法
let reg1 : RegExp = new RegExp('ljy','gi')
console.log(reg1)

//字面量的聲明法
let reg2 : RegExp = /ljy/gi
console.log(reg2)

 


免責聲明!

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



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