在Javascript中,前面一篇文章介紹了TypeScript(微信公衆號中的一篇文章),相信看過這邊文章的人應該對Ts有所瞭解了。這篇文章大家和我一起來了解下TS的基本知識點吧。
在開始之前我們先裝環境:
npm i typescript -g //全局安裝typescript
npm init -y //進入文件夾,初始化項目,生成package.json文件
tsc --init //創建tsconfig.json文件
npm i @types/node -S //這個主要是解決模塊的聲明
環境到此安裝結束;
變量類型
(1)number 類型
let num1 : number = 20;
let num2 : number = 175.5;
let a1 : number = Infinity; //正無窮大
let a2 : number = -Infinity; //負無窮小
let a3 : number = NaN;
注意:Infinity, -Infinity, NaN 也屬於Number類型
(2)undefined 類型
let un : undefined = undefined;
注意:undefined 類型的數據只能被賦值爲 undefined,在 typescript中,已聲明未初始化的值要直接訪問的話,類型需要定義爲undefined。
(3)null 類型
let nu : null = null;
注意:
null 類型只能被被賦值爲null
null是一個空指針對象,undefined是未初始化的變量,所以,可以把undefined看成一個空變量,把unll看成一個空對象。
特別注意: 默認情況下,undefined 和 null 類型,是所有其它類型的子類型,也可以說成,它倆可以給所有其他類型賦值。
(4)string 類型
//值類型
let str : string = '你好!'
//引用類型
let str1 : String = new String('你好!')
(5)boolean 類型
let boo : boolean = true;
let boo1 : boolean = false;
(6)symbol 類型
let sy : symbol = Symbol('bar');
注意: symbol類型的值是通過Symbol構造函數創建的。
(7)數組類型
//字面量
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']
(8)元組類型(tuple)
let tup : [string,number] = ['asdasd', 43233];
注意:
元組和數組看起來有點類似,但是,是有區別的
元組的長度是有限的,而且分別爲每一個元素定義了類型
(9)枚舉類型(enum)
enum--->組織收集一組相關變量的方式。
數字枚舉
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)//冬
注意:
字符串枚舉類型允許使用字符串來初始化枚舉成員,可以是一個字符串字面量或者另一個字符串的枚舉成員
字符串枚舉類型不支持成員自增長,每個成員必須初始化,另外字符串枚舉不會爲成員生成發向映射
(10)void 類型
void 類型--->表示沒有任何返回值,一般用於定義方法時方法沒有返回值
。
function f1() : void {
console.log('void類型')
}
注意:
這裏你也可以指定返回值類型爲 undefined。因爲 JS 中,如果函數沒有返回值,則會默認返回 undefind。不過,使用 void 類型可以使表意更清晰。
(11)any 類型
注意: 其他類型都是any類型的子類型 ,any類型的值可以被賦值爲任何類型的值
。
let an : any = 'any 類型';
console.log(an)//any 類型
an = 25;
console.log(an)//25
注意:對於any 需要注意兩點
如果在聲明變量時,沒有聲明其類型,也沒有初始化,(因爲類型推斷會自動判斷類型),那麼它就會被判斷爲any類型
。
let an1;
an1 = '沒有聲明其類型,也沒有初始化';
console.log(an1)//沒有聲明其類型,也沒有初始化
an1 = 25
console.log(an1)//25
在any類型變量上可以訪問任何屬性,即使它不存在。
let something: any = 42
something.mayExist() // 沒問題,因爲其可能在運行時存在
something.toFixed() // 沒問題,雖然確實存在,但是編譯器並不會去檢查
(12)never 類型
注意:
never 表示永遠不會存在的值的類型, never 是任何類型的子類型,但是 沒有任何類型是never的子類型或可以賦值給never類型(除了never本身之外)。即使 any也不可以賦值給never。
never 類型常用於兩種情況
用於描述從不會有返回值的函數---》返回never的函數必須存在無法達到的終點。
function f5() : never {
while (true) {
// do something
}
}
用於描述總拋出錯誤的函數
function f2(msg : string) : never {
throw new Error(msg)
}
(13)日期類型
let da : Date = new Date()
console.log(da)
(14)正則表達式類型
//構造函數聲明法
let reg1 : RegExp = new RegExp('ljy','gi')
console.log(reg1)
//字面量的聲明法
let reg2 : RegExp = /ljy/gi
console.log(reg2)
總結
TS的數據類型有14種之多,這也使得前後端的差異越來越小。
對於習慣使用弱類型語言JS的同學可能有些不適應。
下一篇文章會出關於TypeScript的函數的知識點,敬請期待。
你點的每個關注,我都認真當成了喜歡