系統學習 TypeScript(三)——基礎類型

TypeScript

前言

TypeScript 包含的基礎類型總結起來有:

  • 布爾值
  • 數字
  • 字符串
  • 數組
  • 元組
  • 枚舉
  • 任意值
  • 空值
  • Null 和 undefined
  • Never
  • Object

今天,我們就來詳細瞭解一下各個類型所代表的含義及表示方法。

布爾值 → boolean

它只有兩個值——true 和 false。

let isNew: boolean = true;

數字 → number

TypeScript 中的整形和浮點數類型都是 number,這點和 JavaScript 是一樣的,比如:十進制、二進制、八進制和十六進制的類型都是 number。

let decAge: number = 22;
let hexAge: number = 0x0016;
let binaryAge: number = 0b10110;
let octalAge: number = 0o026;
// 以上變量使用 (number).toString(10) 轉換爲十進制都爲 22

可使用 (number).toString(進制) 將數字轉換爲任意進制的類型。

字符串 → string

和 JavaScript 一樣,字符串的值使用單引號或者雙引號包裹:

let myName: string = "編程三昧";
let myHomepage: string = `example.com/${myName}`;

數組

TypeScript 中定義數組的方式有兩種。

第一種是元素類型後面接上 [],表示由此類型元素組成的一個數組:

let arr: number[] = [1, 2, 3, 4];
// 如果在數組中加入其他元素會報錯

第二種是使用數組泛型定義數組:

let arr1: any[] = [1, "2", 3, "4"];
// 這個數組中可以假如任意類型的元素

元組 Tuple

元組類型允許表示一個已知元素數量和類型的數組,各元素的類型不必相同。

let arr2:[number, string, number] = [1,"2",3];
// 若果寫成 [1,2,3] 會報錯

元素是嚴格規定了數組的長度和每個位置的元素類型,並且在賦值時需要嚴格對應,否則會報錯。

枚舉

enum類型是對JavaScript標準數據類型的一個補充。 像C#等其它語言一樣,使用枚舉類型可以爲一組數值賦予友好的名字。

enum Color {Red, Green, Blue}
let c: Color = Color.Green;

默認情況下,從0開始爲元素編號。 你也可以手動地指定成員的數值。 例如,我們將上面的例子改成從 1開始編號:

enum Color {Red = 1, Green, Blue}
let c: Color = Color.Green;

或者,全部都採用手動賦值:

enum Color {Red = 1, Green = 2, Blue = 4}
let c: Color = Color.Green;

枚舉類型提供的一個便利是你可以由枚舉的值得到它的名字。 例如,我們知道數值爲2,但是不確定它映射到Color裏的哪個名字,我們可以查找相應的名字:

enum Color {Red = 1, Green, Blue}
let colorName: string = Color[2];

console.log(colorName);  // 顯示'Green'因爲上面代碼裏它的值是2

任意值 any

代表任意類型的值。如果不希望類型檢查器對這些值進行檢查而是直接讓它們通過編譯階段的檢查。,那麼就可以使用 any類型來標記這些變量:

let a: any = 12;
a = "12";

let list: any[] = [1, true, "free"];
list[1] = 100;

空值 void

當一個數據沒有任何類型時,通常用 void 標記,多用於函數返回值。

function sayName(): void {
    console.log(`My name is 編程三昧。`);
}
let aNull: void = null;
let aNull1: void = undefined;

void 類型只能被賦值爲 null 或者 undefined。

null 和 undefined

TypeScript 中也有 null 和 undefined 兩種類型,它們只能各自對應 null 值和 undefined 值。

let theNull: null = null;
let theUndefined: undefined = undefined;

這兩個類型基本上沒啥大的用處。

null 和 undefined 是否可賦值給 number 類型的變量,取決於編譯配置文件中的 “--strictNullChecks” 選項是否關閉,一般是建議打開這個選項的。

Never

never類型表示的是那些永不存在的值的類型。 例如, never類型是那些總是會拋出異常或根本就不會有返回值的函數表達式或箭頭函數表達式的返回值類型; 變量也可能是 never類型,當它們被永不爲真的類型保護所約束時。

never類型是任何類型的子類型,也可以賦值給任何類型;然而,沒有類型是never的子類型或可以賦值給never類型(除了never本身之外)。 即使 any也不可以賦值給never

下面是一些返回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 類型包含除了幾種基本類型之外的所有類型。

let obj: object = [1,2,3];
let obj1: object = {
    name: "編程三昧"
};
let func: object = ()=>{
    console.log("編程三昧");
}

擴展

1、TypeScript 會根據你給變量的初始值判斷默認類型。

let aNum = 12;
aNum = "number";
// Type 'string' is not assignable to type 'number'.

2、函數方法的參數和返回值都可以使用類型限制,保證傳參和返回值的正確性。

function sum(a: number, b:number): number {
    return a + b;
}
sum(1, "3");
// Argument of type 'string' is not assignable to parameter of type 'number'.

總結

以上就是 TypeScript 中的基礎數據類型介紹,總結起來就是:

  • 在變量(函數的括號)後面添加冒號,後面跟上期望的類型,即可限制類型的前後一致性;
  • 如果沒有顯式的添加類型限制,TypeScript 會根據初始值自動添加類型。

~

~ 本文完,感謝閱讀!

~

學習有趣的知識,結識有趣的朋友,塑造有趣的靈魂!

大家好,我是〖編程三昧〗的作者 隱逸王,我的公衆號是『編程三昧』,歡迎關注,希望大家多多指教!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章