TypeScript 最爲 JavaScript 的超集,它的基本數據類型與 JavaScript 是完全相同的。數據類型有原始數據類型和非原始數據類型兩種。
基本數據類型有哪些?
原始數據類型有以下六種:
- boolean 布爾值
- number 數值
- string 字符串
- null 空值
- undefined 未定義
- Symbol (ES6 中的新類型)
非原始數據類型有以下九種:
- 數組
- Tuple 元祖
- enum 枚舉
- never 永不存在的值的類型
- void
- any 任意類型
- 聯合類型
- 函數類型
其中元組、枚舉、任意值、void 類型和 never 類型是 TypeScript 有別與 JavaScript 的特有類型。在 TypeScript 中聲明變量,需要加上類型聲明,例如 boolean 和 string 等。通過靜態類型約束,在編譯時執行類型檢查,可以避免一些類型混用的低級錯誤。
原始數據類型
布爾值
布爾值是最基礎的數據類型,在 TypeScript 中,使用 boolean 定義布爾值類型:
let isDone: boolean = false;
數字
和 JavaScript 一樣,TypeScript 裏的所有數字都是浮點數。 這些浮點數的類型是 number。 除了支持十進制和十六進制字面量,TypeScript 還支持 ECMAScript 2015 中引入的二進制和八進制字面量。
let a: number = 6;
// ES6 中的二進制表示法
let b: number = 0b1010;
// ES6 中的八進制表示法
let c: number = 0o744;
字符串
和 JavaScript 一樣,可以使用雙引號( ")或單引號(’)表示字符串。
let myName: string = "xiaoming";
let myAge: number = 25;
空值
JavaScript 沒有空值(Void)的概念,在 TypeScript 中,可以用 void 表示沒有任何返回值的函數。
function alertName(): void {
alert("My name is Tom");
}
聲明一個 void 類型的變量沒有什麼用,因爲你只能將它賦值爲 undefined 和 null。
let unde: void = undefined;
let nu: void = null;
Null 和 Undefined
在 TypeScript 中,可以使用 null 和 undefined 來定義這兩個原始數據類型。
let un: undefined = undefined;
let nu: null = null;
與 void 的區別是,undefined 和 null 是所有類型的子類型。也就是說 undefined 類型的變量,可以賦值給 number 類型的變量
// 這樣不會報錯
let num: number = undefined;
// 這樣也不會報錯
let un: undefined;
let num2: number = un;
非原始數據類型
數組
定義數組有兩種方式。
第一種:普通方式
可以在元素類型後面接上 [],表示由此類型元素組成的一個數組,數組的項中不允許出現其他的類型。
//數組表現方式 類型[]
let arr: number[] = [1, 2, 3, 4];
第二種:泛型方式 Array<元素類型>
let list: Array<number> = [1, 2, 3];
元祖
元組類型允許表示一個已知元素數量和類型的數組,各元素的類型不必相同。比如,你可以定義一對值分別爲 string和number類型的元組。
let x: [string, number];
x = ["Hello", 10];
枚舉
使用枚舉我們可以定義一些帶名字的常量。 使用枚舉可以清晰地表達意圖或創建一組有區別的用例。 TypeScript 支持數字的和基於字符串的枚舉。
// 利用 const 關鍵詞也可以聲明一組常量,例如,聲明十二生肖的排位
const rat: number = 1;
const cattle: number = 2;
const tiger: number = 3;
const rabbit: number = 4;
const dragon: number = 5;
數字枚舉
默認情況下,從 0 開始爲元素編號。 你也可以手動的指定成員的數值。
enum ChineseZodiac {
rat,
cattle,
tiger,
rabbit,
dragon,
}
字符串枚舉
在一個字符串枚舉裏,每個成員都必須用字符串字面量,或另外一個字符串枚舉成員進行初始化。
enum Person {
name = "NAME",
age = "AGE",
love = "LOVE",
hobby = "HOBBY",
}
console.log(Person.name); // NAME
console.log(Person.hobby); // HOBBY
never
never 類型是任何類型的子類型,也可以賦值給任何類型,一般作爲函數返回值。
// 返回never的函數必須存在無法達到的終點
function error(message: string): never {
throw new Error(message);
}
void
void 類型像是與 any 類型相反,它表示沒有任何類型。 當一個函數沒有返回值時,你通常會見到其返回值類型是 void。
function warn(): void {
console.log("This is my warning message");
}
any 任意類型
任意值(Any)用來表示允許賦值爲任意類型。聲明一個變量爲任意值之後,對它的任何操作,返回的內容的類型都是任意值。變量如果在聲明的時候,未指定其類型,那麼它會被識別爲任意值類型。
let notSure: any = 4;
notSure = "這是字符串";
notSure = false;
當你不希望類型檢查器對某些值進行檢查而是直接讓它們通過編譯階段的檢查可以使用 any 類型來標記這些變量。
聯合類型
聯合類型(Union Types)表示取值可以爲多種類型中的一種。
let num: string | number;
num = "seven";
num = 7;
聯合類型使用 | 分隔每個類型。這裏的 let num: string | number 的含義是,允許 num 的類型是 string 或者 number,但是不能是其他類型。
對象類型
object 表示非原始類型,也就是除 number,string,boolean,symbol,null 或 undefined 之外的類型。
declare function create(o: object | null): void;
create({ name: 0 }); // OK
create(null); // OK
create(2); // Error
create("字符串"); // Error
create(false); // Error
create(undefined); // Error