
一、是什么
typescript 和 javascript幾乎一樣,擁有相同的數據類型,另外在javascript基礎上提供了更加實用的類型供開發使用
在開發階段,可以為明確的變量定義為某種類型,這樣typescript就能在編譯階段進行類型檢查,當類型不合符預期結果的時候則會出現錯誤提示
二、有哪些
typescript 的數據類型主要有如下:
- boolean(布爾類型)
- number(數字類型)
- string(字符串類型)
- array(數組類型)
- tuple(元組類型)
- enum(枚舉類型)
- any(任意類型)
- null 和 undefined 類型
- void 類型
- never 類型
- object 對象類型
boolean
布爾類型
let flag:boolean = true;
// flag = 123; // 錯誤
flag = false; //正確
number
數字類型,和javascript一樣,typescript的數值類型都是浮點數,可支持二進制、八進制、十進制和十六進制
let num:number = 123;
// num = '456'; // 錯誤
num = 456; //正確
進制表示:
let decLiteral: number = 6; // 十進制
let hexLiteral: number = 0xf00d; // 十六進制
let binaryLiteral: number = 0b1010; // 二進制
let octalLiteral: number = 0o744; // 八進制
string
字符串類型,和JavaScript一樣,可以使用雙引號(")或單引號(')表示字符串
let str:string = 'this is ts';
str = 'test';
作為超集,當然也可以使用模版字符串``進行包裹,通過 ${} 嵌入變量
let name: string = `Gene`;
let age: number = 37;
let sentence: string = `Hello, my name is ${ name }
array
數組類型,跟javascript一致,通過[]進行包裹,有兩種寫法:
方式一:元素類型后面接上 []
let arr:string[] = ['12', '23'];
arr = ['45', '56'];
方式二:使用數組泛型,Array<元素類型>:
let arr:Array<number> = [1, 2];
arr = ['45', '56'];
tuple
元祖類型,允許表示一個已知元素數量和類型的數組,各元素的類型不必相同
let tupleArr:[number, string, boolean];
tupleArr = [12, '34', true]; //ok
typleArr = [12, '34'] // no ok
賦值的類型、位置、個數需要和定義(聲明)的類型、位置、個數一致
enum
enum類型是對JavaScript標准數據類型的一個補充,使用枚舉類型可以為一組數值賦予友好的名字
enum Color {Red, Green, Blue}
let c: Color = Color.Green;
any
可以指定任何類型的值,在編程階段還不清楚類型的變量指定一個類型,不希望類型檢查器對這些值進行檢查而是直接讓它們通過編譯階段的檢查,這時候可以使用any類型
使用any類型允許被賦值為任意類型,甚至可以調用其屬性、方法
let num:any = 123;
num = 'str';
num = true;
定義存儲各種類型數據的數組時,示例代碼如下:
let arrayList: any[] = [1, false, 'fine'];
arrayList[1] = 100;
null 和 和 undefined
在JavaScript 中 null表示 "什么都沒有",是一個只有一個值的特殊類型,表示一個空對象引用,而undefined表示一個沒有設置值的變量
默認情況下null和undefined是所有類型的子類型, 就是說你可以把 null和 undefined賦值給 number類型的變量
let num:number | undefined; // 數值類型 或者 undefined
console.log(num); // 正確
num = 123;
console.log(num); // 正確
但是ts配置了--strictNullChecks標記,null和undefined只能賦值給void和它們各自
void
用於標識方法返回值的類型,表示該方法沒有返回值。
function hello(): void {
alert("Hello Runoob");
}
never
never是其他類型 (包括null和 undefined)的子類型,可以賦值給任何類型,代表從不會出現的值
但是沒有類型是 never 的子類型,這意味着聲明 never 的變量只能被 never 類型所賦值。
never 類型一般用來指定那些總是會拋出異常、無限循環
let a:never;
a = 123; // 錯誤的寫法
a = (() => { // 正確的寫法
throw new Error('錯誤');
})()
// 返回never的函數必須存在無法達到的終點
function error(message: string): never {
throw new Error(message);
}
object
對象類型,非原始類型,常見的形式通過{}進行包裹
let obj:object;
obj = {name: 'Wang', age: 25};
三、總結
和javascript基本一致,也分成:
- 基本類型
- 引用類型
在基礎類型上,typescript增添了void、any、emum等原始類型
參考文獻
- https://www.tslang.cn/docs/handbook/basic-types.html
