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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM