天天看點

TypeScripts前端基礎篇(1)---ts基本資料類型

學了​​JS資料類型以及資料類型的判斷方法​​,那你知道TypeScript(ts)有哪些基本資料類型碼?

ts中目前有以下基本資料類型:

//boolean

let istrue: boolean = true; //布爾值      

//number  (數字 TypeScript所有數字都是浮點數,除了支援十進制和十六進制字面量,TypeScript還支援ECMAScript 2015中引入的二進制和八進制字面量。)

let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
let binaryLiteral: number = 0b1010;
let octalLiteral: number = 0o744;      

//string 字元串

let maomi: string = 'cat';
maomi = '饅頭';      

//數組

let list: number[] = [1,2,3];//定義數組的方式一
let tableList: Array<number> = [4,5,6]; //定義數組的方式二: 數組泛型
    let children1: (string | number)[] = ["張三瘋",888,'79'];
    let children2: Array<number | string> = ['zhurong', 611];      

//元組Tuple  (元組類型允許表示一個已知元素數量和類型的數組,各元素的類型不必相同。但是,元組必須和定義的類型一一對應)

let x: [string, number];
    x = ['Runoob', 1];    // 運作正常
    x = [1, 'Runoob'];    // 報錯(是以元組中的元素類型是有順序區分的,順序變了就會報錯)
    console.log(x[0]);    // 輸出 Runoob      

//枚舉

enum Person {Age, Weight, Height, Name}
let a: Person = Person .Name;
let b: string = Person[0]
預設情況下,從0開始為元素編号。
console.log(b);  // 列印出來的是'Age',因為上面代碼裡它的值是0      

 運作結果如下:

TypeScripts前端基礎篇(1)---ts基本資料類型
// 你也可以手動的指定成員的數值。 例如,我們将上面的例子改成從 10開始編号:

enum Person {Age = 10, Weight, Height, Name}
let personName: string = Person[11];
console.log(personName);  // 顯示'Weight'因為上面代碼裡它的值是11      

//any

在為不清楚類型的變量指定一個類型時,any就用來标記這種變量。

let item:any;
item = 1002;
item = false;
item = "Hello,TypeScript!";
console.log(item);      

運作結果如下:

TypeScripts前端基礎篇(1)---ts基本資料類型
let list: any[] = [1, true, "free"];
list[1] = 100;
console.log(list); //列印出:[ 1, 100, 'free' ]      

//Void

某種程度上來說,​

​void​

​​類型像是與​

​any​

​​類型相反,它表示沒有任何類型。 當一個函數沒有傳回值時,你通常會見到其傳回值類型是 ​

​void。​

​  

function action(): void{
  console.log('123456789')
}
action();// 123456789      

//聲明一個void類型的變量沒有什麼大用,因為你隻能為它賦予undefined和null:

let voidListType: void = undefined;      

//Null和Undefined 

在ts中,預設情況下null和undefined是所有類型的子類型。 就是說你可以把 null和undefined指派給任意類型的變量。但是,當你在tsconfig中将strictNullChecks 設定成false之後,即"strictNullChecks": false  将不再允許把null、undefined指派給其他類型的變量。

//預設情況
let numX: number = 888;
numX= undefined;
console.log(numX); //這個沒有設定"strictNullChecks": false的時候是正确的      

//Never

​never​

​​類型表示的是那些永不存在的值的類型。 例如, ​

​never​

​​類型是那些總是會抛出異常或根本就不會有傳回值的函數表達式或箭頭函數表達式的傳回值類型; 變量也可能是 ​

​never​

​類型,當它們被永不為真的類型保護所限制時。

​never​

​類型是任何類型的子類型,也可以指派給任何類型;然而,沒有類型是​

​never​

​​的子類型或可以指派給​

​never​

​​類型(除了​

​never​

​​本身之外)。 即使 ​

​any​

​​也不可以指派給​

​never​

​。

// 傳回never的函數必須存在無法達到的終點
function error(message: string): never {
    throw new Error(message);
}

// 推斷的傳回值類型為never
function fail() {
    return error("Something failed");
}

// 傳回never的函數必須存在無法達到的終點
function infiniteLoop(): never {
    while (true) {
    }
}      

//Object

object表示非原始類型,也就是除number,string,boolean,symbol,null或undefined之外的類型。

使用object類型,就可以更好的表示像Object.create這樣的API

let obj1:object = {
    single:'單身'
}      

//類型斷言

有時候你會遇到這樣的情況,你會比TypeScript更了解某個值的詳細資訊。 通常這會發生在你清楚地知道一個實體具有比它現有類型更确切的類型。

通過類型斷言這種方式可以告訴編譯器,“相信我,我知道自己在幹什麼”。 類型斷言好比其它語言裡的類型轉換,但是不進行特殊的資料檢查和解構。 它沒有運作時的影響,隻是在編譯階段起作用。 TypeScript會假設你,程式員,已經進行了必須的檢查。

類型斷言有兩種形式。 其一是“尖括号”文法:

let someValue: any = "this is a string";

let strLength: number = (<string>someValue).length;      
let someValue: any = "this is a string";

let strLength: number = (someValue as string).length;