一、TypeScript
介紹:
- TypeScript是微軟開發的一門程式語言(簡稱TS),是JavaScript的一個超集。
- TypeScript擴充套件了JavaScript的語法,新增了一些新的遵循ES6規範的語法,具有基於類的物件導向程式設計的特性。任何已經存在的JavaScript程式可以不加任何改動的在TypeScript執行環境下執行。
TypeScript的優勢
- 支援部分ES6規範
- 型別檢查
- 物件導向的特性
二、基本資料型別
在程式語言都有:整型、浮點、布林、字元、字串、複數、抽象資料型別
但在TS中我們將整型和浮點歸為:number
在TS中·有如下型別:
布林型別 boolean
數字型別 number
字串型別 string
陣列型別 array
元組型別 tuple
列舉型別 enum
任意型別 any
null 和 undefined
void型別
never型別
常量(const)
常量的定義和賦值我們使用關鍵字const
,使用const的常量不能被重新賦值,例如下面程式碼中,anExampleVariable不可以被給予其他賦值const anExampleVariable = "Hello World" console.log(anExampleVariable)
列印結果:
Hello World
注:console.log()為列印函式
變數
let num = 123 //let num: number = 123 num = 3.14 console.log(num)
列印結果:3.14
接著看小面:let anExampvalue = 'ice_moss' console.log(anExampvalue) anExampvalue = "TypeScript" console.log(anExampvalue)
列印結果:
ice_moss TypeScript
literal type
literal 型別使我們能具體規定變數允許的資料型別
看例子:let answer:'yes'| 'no'| 'maybe' = 'no' console.log(answer) answer = 'maybe' console.log(answer)
列印結果:
no maybe
又或者:
let httpstatus: '400' | '404' | '500' = '500' console.log(httpstatus) httpstatus = '404' console.log(httpstatus) let s: string = httpstatus //使用該方法可以將literal type變為string,但不能變為其他資料型別(如:number、boolean) s = 'ice_moss' console.log(s)
列印結果:
500
404
ice_moss
當然不同型別也可混用literal type//不同型別也可混用literal type let httpstatusvalue: 404 | "ice_moss" | boolean | undefined = 404 console.log(httpstatusvalue)
any
我們知道TS是JS的超集,但JS沒有過多的語法約束和提示,這使得JS開發人員的很多的工作量都在尋找JS的語法上,這也是TS誕生的原因;迴歸正題any
就是將TS是語法約束去掉。下面看程式碼://any of type 會失去語法約束 let a: any console.log(a) a = 1 console.log(a) a = 2 console.log(a) let b: undefined console.log(b) 列印結果: ```ts undefined 1 2 undefined
undefined
:不明確的型別
三、邏輯控制
下面我們來了解一下邏輯控制,在TS中有if、if-else、switch、for、while、try-catch
下面我們來一一介紹:
在介紹之前我們需要先來了解一下函式定義的基本語法
//函式
function Test(){
……
//函式體
……
}
其實也沒什麼特別的地方
- if/if-else
function processHttpStatus(s:
200 | 404 | 500 | '200' | '404' | '500'){
//一律使用===,!==
if(s === 200){
console.log('ok')
}else if(s === 404){
console.log('not found')
}else if(s === 500){
console.log('internrl server error')
}else if(s === '200'){
console.log('ok')
}else if(s === '404'){
console.log('not found')
}else if(s === '500'){
console.log('internrl server error')
}//else { 這裡不需要,引數列表中沒有,呼叫其他值,會報錯
// console.log('unknwn error')
//}
}
當然,對應這個函式我們有最佳化的方法:
function processHttpStatusdata(s:
200 | 404 | 500 | '200' | '404' | '500'){
//把number轉成string
let statusStr = ''
if (typeof s === 'number'){ //需要使用關鍵字typeof
statusStr = s.toString()
}else{
statusStr = s
}
if(statusStr === '200'){
console.log('ok')
}else if(statusStr === '404'){
console.log('not found')
}else if(statusStr === '500'){
console.log('internrl server error')
}
}
我們呼叫函式:
processHttpStatusdata(404)
輸出結果:
not found
這就是if/if-else
- switch
我們還是使用上面例子來講解
function processHttpStatusValue(s:
200 | 404 | 500 | '200' | '404' | '500'){
//把string轉成number
let statusStr = 0
if (typeof s === 'string'){
statusStr = parseInt(s)
}else{
statusStr = s
}
switch(statusStr){
case 200:
console.log('ok')
break
case 404:
console.log('not found')
break
case 500:
console.log('internl server error')
break
}
}
函式呼叫:
processHttpStatusValue(‘500’)
輸出結果:
internl server error
for/while
下面是一個求1~100之和的例子
(1). 基於forfunction mulData(){ let sum = 0 for(let i = 0; i <= 100; i++){ sum += i } console.log(sum) }
呼叫:mulData()
輸出:5050(2). 基於while
function sumValue(){ let sum = 0 let i = 1 while(i <= 100){ sum += i i++ } console.log(sum) }
呼叫: sumValue
輸出:5050try-catch
function cycle(){
let sum = 0
for(let i = 0; i <= 100; i++){
try{
sum += i
if (i % 5 === 0){
throw `bad number ${i}`
}
}catch (err){
console.error(err)
console.log('this is err')
}
}
console.log(sum)
}
四、列舉型別
我們定義一個:
enum HTTPStatus{
OK,
NOT_FOUND,
INTERNAR_SERVER_ERROR,
}
接著定義一個函式:
function processHTTPStatus(s:HTTPStatus){
if(s === HTTPStatus.OK){
console.log('good response')
}else{
console.log('bad response')
}
console.log(s)
}
//呼叫:
processHTTPStatus(HTTPStatus.OK)
//輸出:
good response
0
輸出0的原因是在enum HTTPStatus中:
OK, //0
NOT_FOUND, //1
INTERNAR_SERVER_ERROR, //2
當然,我們還可以直接在enum HTTPStatus{}給成員賦值,看下面:
enum HTTPStatusValue{
OK = 200,
NOT_FOUND = 404
INTERNAR_SERVER_ERROR = 500
}
function processHTTPStatusValue(s:HTTPStatusValue){
if(s === HTTPStatusValue.OK){
console.log('good response')
}else{
console.log('bad response')
}
console.log(s)
}
呼叫:
processHTTPStatusValue(HTTPStatusValue.OK)
// 輸出:
good response
200
那麼有人會問,如果我不像讓數字輸出,我們只希望輸出我們成員的名稱怎麼辦;這裡的方法也簡單,看下面:
function processHttpStatusvalue(s: HTTPStatusValue){
//I WANT PRINT INTERNAR_SERVER_ERRO
console.log(HTTPStatusValue[s])
const str: string = HTTPStatus[s]
}
//呼叫
processHttpStatusvalue(HTTPStatusValue.INTERNAR_SERVER_ERROR)
// 輸出結果:
'INTERNAR_SERVER_ERROR'
本作品採用《CC 協議》,轉載必須註明作者和本文連結