布爾值、數(shù)字爷贫、字符串认然、數(shù)組补憾、元組、枚舉卷员、Any盈匾、Void、Null毕骡、Undefined削饵、Never、Object
let 變量名稱 :變量類型 = 值 挺峡;//值的類型必須與變量類型一致葵孤,否則提示錯(cuò)誤
- 數(shù)組担钮、元組橱赠、枚舉
1 //數(shù)組
2 let list: number[] = [1,2,3];//list變量是一個(gè)數(shù)組,只要賦值數(shù)組就沒問題
3 let numList: Array<number> = [1,2,3];//泛型數(shù)組箫津,賦值的數(shù)組每個(gè)元素類型必須符合指定的泛型類型
4 let strList: Array<string> = ["1","2","3"];//這是一個(gè)字符串泛型數(shù)組
5 let names:string[] = ['小明','小紅'];//字符串泛型數(shù)組-簡寫
6 let arr:[string,number] = ['1',2]; //元組:聲明數(shù)組時(shí)指定數(shù)組的每一個(gè)元素類型狭姨,并且數(shù)組長度不能超出變量聲明時(shí)指定的元素個(gè)數(shù)
TypeScript中的枚舉(enum)非常友好的提供了一個(gè)有窮序列集的數(shù)據(jù)結(jié)構(gòu),它會(huì)默認(rèn)從0開始給每個(gè)元素編號苏遥,可以通過元素獲取編號饼拍,也可以通過編號獲取元素名稱,然而其內(nèi)部實(shí)現(xiàn)采用的是犧牲空間換時(shí)間的方式田炭,比如枚舉Color中有一個(gè)元素Blue,底層實(shí)現(xiàn)方式是{Blue:0,0:'Blue'},這就實(shí)現(xiàn)了當(dāng)要查找值對應(yīng)的元素時(shí)只需要Color[0]就能獲取师抄,而如果在前的數(shù)組或?qū)ο笾幸氆@得值對應(yīng)的元素就只能遍歷數(shù)組或者對象來實(shí)現(xiàn)。
1 //枚舉
2 enum Color {
3 Red,
4 Green,
5 Blue
6 }
7 console.log(Color.Red);//0
8 //自定義編號或者值:編號只能為數(shù)值,元素為字符串
9 enum Name {
10 xiaoming = 3,
11 xiaohong = 5
12 }
13 console.log(Name[3]);//'xiaoming'
14 //枚舉同樣不能越界,只能在枚舉有限集合中查找
15 Color.Yellow = 4; //報(bào)錯(cuò)(2339):類型上找不到‘Yellow’該屬性
- 任意類型(any)與無效類型(Void)
1 //any類型:同等與JavaScript的變量教硫,變量的類型取決于值的類型叨吮,并且可以任意變化
2 let notSure: any = 4;
3 notSure = "maybe a string instead";
4 notSure = false;
這里可能會(huì)疑惑Any這個(gè)變量類型有什么用?這不又回到了JavaScript了嗎瞬矩?的確茶鉴,它可以幫助我們回歸到JavaScript變量類型模式,這就意味著我們?nèi)绻谧鲰?xiàng)目升級時(shí)景用,在遇到無法確定的變量類型我們就可以使用Any涵叮;還有就是第三方庫或者用戶輸入的數(shù)據(jù),我們也可能無法確定其類型伞插,這時(shí)候就可以解決這類問題割粮。
還有一個(gè)很關(guān)鍵的應(yīng)用就是TypeScript中的數(shù)組,前面的Array語法中如果需要一個(gè)元素類型不相同的數(shù)組我們只能使用元組來實(shí)現(xiàn)媚污,但是元組有約束了下標(biāo)和長度舀瓢,還是可能無法完成一些特殊的需求,特別是對于習(xí)慣JavaScript的寬松的數(shù)組模式杠步,Any可以幫助TtypeScript實(shí)現(xiàn)同等JavaScript的數(shù)組:
let list: any[] = ['hello',100,true];
void類型用處就不大了氢伟,它用來表示沒有任何類型榜轿,其作用就是用來描述沒有類型,在一定程度上它同等與undefinde朵锣。
1 //void變量值始終為undefined
2 let a: void = undefined;
3 function foo(): void {//用來表示函數(shù)不返回任何值
4 // return void ...;以前我們可以這樣表示函數(shù)不返回任何值
5 // 之前javaScript的寫法不會(huì)有錯(cuò)誤檢查谬盐,閱讀代碼時(shí)需要查看函數(shù)內(nèi)部代碼
6 }
- undefined、null
用來指定變量只能為undefined和null的值诚些,undefined和null變量類型在TypeScript中還有一個(gè)含義飞傀,它們可以作為任何變量的子集,當(dāng)然這時(shí)在tsconfig.json的"strictNullChecks": false的情況下诬烹。
1 let a:undefined = undefined;
2 let b:null = null;
3 let c: number = 10;
4 c = undefined;
5 c = null;
6 // tsconfig.json -- "strictNullChecks": false模式
- never
用來表示那些永遠(yuǎn)不存在的值的類型砸烦。比如拋出錯(cuò)誤,這種情況通常出現(xiàn)在錯(cuò)誤檢查中绞吁。變量也可以是never類型幢痘,但是賦值除了自身類型以外的任何變量類型都會(huì)提示錯(cuò)誤。
1 //1.拋出異常
2 function error(message: string): never {
3 throw new Error(message);
4 }
5 //死循環(huán)
6 function loop(): never {
7 while (true){}
8 }
9 //never是所有類型的子集家破,例如作為number的子集:
10 let a: number;
11 y = (() => { throw new Error 'message' })();
- 函數(shù)類型function
1 function add1(x:number,y:number):number{
2 return x+y;
3 }
4
5 let add2 = function(x:number,y:number):number{
6 return x + y;
7 }