系統(tǒng)學(xué)習(xí) TypeScript(三)——基礎(chǔ)類型

TypeScript

前言

TypeScript 包含的基礎(chǔ)類型總結(jié)起來有:

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

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

布爾值 → boolean

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

let isNew: boolean = true;

數(shù)字 → number

TypeScript 中的整形和浮點(diǎn)數(shù)類型都是 number,這點(diǎn)和 JavaScript 是一樣的,比如:十進(jìn)制、二進(jìn)制、八進(jìn)制和十六進(jìn)制的類型都是 number。

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

可使用 (number).toString(進(jìn)制) 將數(shù)字轉(zhuǎn)換為任意進(jìn)制的類型。

字符串 → string

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

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

數(shù)組

TypeScript 中定義數(shù)組的方式有兩種。

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

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

第二種是使用數(shù)組泛型定義數(shù)組:

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

元組 Tuple

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

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

元素是嚴(yán)格規(guī)定了數(shù)組的長度和每個位置的元素類型,并且在賦值時需要嚴(yán)格對應(yīng),否則會報錯。

枚舉

enum類型是對JavaScript標(biāo)準(zhǔn)數(shù)據(jù)類型的一個補(bǔ)充。 像C#等其它語言一樣,使用枚舉類型可以為一組數(shù)值賦予友好的名字。

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

默認(rèn)情況下,從0開始為元素編號。 你也可以手動地指定成員的數(shù)值。 例如,我們將上面的例子改成從 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;

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

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

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

任意值 any

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

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

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

空值 void

當(dāng)一個數(shù)據(jù)沒有任何類型時,通常用 void 標(biāo)記,多用于函數(shù)返回值。

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

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

null 和 undefined

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

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

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

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

Never

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

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

下面是一些返回never類型的函數(shù):

// 返回never的函數(shù)必須存在無法達(dá)到的終點(diǎn)
function error(message: string): never {
    throw new Error(message);
}

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

// 返回never的函數(shù)必須存在無法達(dá)到的終點(diǎn)
function infiniteLoop(): never {
    while (true) {
    }
}

object

object 類型包含除了幾種基本類型之外的所有類型。

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

擴(kuò)展

1、TypeScript 會根據(jù)你給變量的初始值判斷默認(rèn)類型。

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

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

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'.

總結(jié)

以上就是 TypeScript 中的基礎(chǔ)數(shù)據(jù)類型介紹,總結(jié)起來就是:

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

~

~ 本文完,感謝閱讀!

~

學(xué)習(xí)有趣的知識,結(jié)識有趣的朋友,塑造有趣的靈魂!

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容