原文: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)
