ES6的資料類型
- Boolean
- Number
- String
- Array
- Function
- Object
- Symbol
- undefined
- null
TypeScript新加的資料類型
- void
- any
- never
- 元組
- 枚舉
- 進階類型
1,數組
//數組 兩種等價聲明
let arr1:number[] = [1,2,3]
let arr2:Array<number> = [1,2,3]
2,元組
//元組 //是一種特殊的數組,限定了數組的類型和個數
let tuple: [number,string]=[0,'1']
//為元組添加一個新的元素會怎樣?允許添加
tuple.push(2)
console.log(tuple)
tuple[2] // 但是不能通路 //tuple type '[number, string]' of length '2' has no element at index '2'.
是以非常不推薦通過push往元組裡加元素。
3,函數類型
//通常傳回值的類型是可以省略的,可以看到傳回值的類型仍然是number
let add=(x:number,y:number)=>x+y
//定義一種函數類型compute,沒有具體實作
let compute:(x:number, y:number) =>number
compute=(a,b)=>a+b
4,對象類型
//對象
let obj:object = {x:1, y:2}
//obj.x=3; //不能指派,因為object類型
let obj2:{x:number,y:number} = {x:1, y:2}
obj2.x=3 //可以
5,Symbol類型
Symbol的含義是具有唯一的值。
//symbol
let s1: symbol=Symbol()
let s2=Symbol()
console.log(s1==s2) //false
6,不能把其他類型指派給undefined和null
//undefined ,null
let un :undefined = undefined
let nu: null = null
// un = 1 //聲明了undefined,就不能指派為其他任何類型
let num2: number = 123
num2 = undefined //不能将類型“undefined”配置設定給類型“number”。
num2=null //不能将類型“null”配置設定給類型“number”。
TS中undefined和null是任何類型的子類型。
可以通過改配置把"strictNullChecks": false, 設定為false。
允許把undefined和null指派給其他類型的值。
7,void
JS中void是一種運算符,可以讓任何表達式傳回undefined.
void
運算符 對給定的表達式進行求值,然後傳回
undefined
。
void運算符通常隻用于擷取undefined的原始值,一般使用void(0),等同于void 0。
8,never類型
永遠不會有傳回值的類型
//never
let error=()=>{
throw new Error('error')
}
let endless=()=>{
while(true){}
}
9,枚舉類型
enum Role{
Reporter =1,
Developer,
Maintainer,
Owner,
Guest
}
實作原理:反向映射
"use strict";
var Role;
(function (Role) {
Role[Role["Reporter"] = 1] = "Reporter";
Role[Role["Developer"] = 2] = "Developer";
Role[Role["Maintainer"] = 3] = "Maintainer";
Role[Role["Owner"] = 4] = "Owner";
Role[Role["Guest"] = 5] = "Guest";
})(Role || (Role = {}));
枚舉分類:
常量枚舉(編譯時計算出結果,在運作時以産量出現)
Computed枚舉:非常量表達式
enum Char{
//const 編譯時算出結果
a,
b = Char.a,
c=1+3,
//computed 運作時才會計算
d=Math.random(),
e='123'.length
}
可以看到得到的js
"use strict";
var Char;
(function (Char) {
//const 編譯時算出結果
Char[Char["a"] = 0] = "a";
Char[Char["b"] = 0] = "b";
Char[Char["c"] = 4] = "c";
//computed 運作時才會計算
Char[Char["d"] = Math.random()] = "d";
Char[Char["e"] = '123'.length] = "e";
})(Char || (Char = {}));
常亮枚舉(用const聲明的枚舉)會在編譯階段被移除。不需要對象,隻需要對象的值的時候用常量枚舉,可以減少編譯後的代碼。
const enum Month{
Jan,
Feb,
Mar
}
let month =[Month.Jan, Month.Feb, Month.Mar]
編譯後的js
"use strict";
let month = [0 /* Jan */, 1 /* Feb */, 2 /* Mar */];
如果覺得本文對您有幫助~可以支付寶(左)或微信支援一下:
看到小夥伴打賞時給我寫一些鼓勵的話,真的非常感動,謝謝你們。
我開了個微信公衆号(第三個二維碼)用來分享自己的職場英語相關學習經驗,感興趣可以關注,我會不斷更新~
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAXbi5Ca6d2Xm9mchR3cvwlZvJXY0N3LcNXZslmZvwVbvNmLzd2bsJmbj5ibkNWLzVGbpZ2Lc9CX6MHc0RHaiojIsJye.bmp)