天天看點

TypeScript 類型

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 */];      

如果覺得本文對您有幫助~可以支付寶(左)或微信支援一下:

看到小夥伴打賞時給我寫一些鼓勵的話,真的非常感動,謝謝你們。

我開了個微信公衆号(第三個二維碼)用來分享自己的職場英語相關學習經驗,感興趣可以關注,我會不斷更新~

TypeScript 類型