0%

重新學習TS-二-TypeScript-數據類型

前言

針對TS 來看看TypeScript 的數據類型

typescriptjavascript 幾乎一樣,擁有相同的數據類型,
另外 typescriptjavascript 基礎上提供了更加實用的類型供開發使用

在開發階段,可以為明確的變量定義為某種類型,這樣 typescript 就能在編譯階段進行類型檢查,當類型不合符預期結果的時候則會出現錯誤提示

數據類型有哪些

數據類型分成下列幾種

基本類型

類型名稱 內容 舉個例子
number 表示數字 let age: number = 30;
string 表示字符串 let name: string = “John”;
boolean 表示布爾值 let isActive: boolean = true;
null 表示空值 let data: null = null;
undefined 表示未定義的值 let data: undefined = undefined;
symbol 表示唯一的符號值 let id: symbol = Symbol(“id”);

複合類型

類型名稱 內容 舉個例子
array 表示數組 let numbers: number[] = [1, 2, 3];
tuple 表示具有固定元素數量和類型的數組 let person: [string, number] = [“John”, 30];
object 表示對象 let user: { name: string, age: number } = { name: “John”, age: 30 };

函數類型

類型名稱 內容 舉個例子
function 表示函數類型 let greet: Function = () => console.log(“Hello!”);
函數的參數和返回值也可以聲明具體的類型 表示具有固定元素數量和類型的數組 let add: (x: number, y: number) => number = (x, y) => x + y;

進階類型

類型名稱 內容 舉個例子
enum 表示列舉類型 enum Color { Red, Green, Blue }; let color: Color = Color.Red;
any 表示任意類型,可以接受任何數據類型 let data: any = 10; data = “Hello”;
unknown 表示未知類型,類似於 any 但具有類型檢查 let data: unknown = 10; data = “Hello”;
void 表示沒有返回值的類型 function sayHello(): void { console.log(“Hello!”); }

以上是 TypeScript 中常見的數據類型,可以幫助在編寫代碼時明確聲明變量的類型,從而提供類型檢查和更好的代碼提示。

舉個例子

boolean

布爾類型

1
2
3
let flag:boolean = true;
// flag = 123; // 錯誤
flag = false; //正確

number

數字類型,和javascript一樣,typescript的數值類型都是浮點數,可支持二進制、八進制、十進制和十六進制

1
2
3
let num:number = 123;
// num = '456'; // 錯誤
num = 456; //正確

進制表示:

1
2
3
4
let decLiteral: number = 6; // 十進制
let hexLiteral: number = 0xf00d; // 十六進制
let binaryLiteral: number = 0b1010; // 二進制
let octalLiteral: number = 0o744; // 八進制

string

字符串類型,和JavaScript一樣,可以使用雙引號(")單引號(')表示字符串

1
2
let str:string = 'this is ts';
str = 'test';

作為超集,當然也可以使用模版字符串``進行包裹,通過${} 嵌入變量

1
2
3
let name: string = `Gene`;
let age: number = 37;
let sentence: string = `Hello, my name is ${ name }

array

數組類型,跟javascript一致,通過[]進行包裹,有兩種寫法:

方式一:元素類型後面接上[]

1
2
let arr:string[] = ['12', '23'];
arr = ['45', '56'];

方式二:使用數組泛型,Array<元素类型>:

1
2
let arr:Array<number> = [1, 2];
arr = ['45', '56'];

tuple

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

1
2
3
let tupleArr:[number, string, boolean];
tupleArr = [12, '34', true]; //ok
typleArr = [12, '34'] // no ok

賦值的類型、位置、個數需要和定義(生明)的類型、位置、個數一致

enum

enum類型是對JavaScript標準數據類型的一個補充,使用列舉類型可以為一組數值賦予友好的名字

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

any

可以指定任何類型的值,在編程階段還不清楚類型的變量指定一個類型,不希望類型檢查器對這些值進行檢查而是直接讓它們通過編譯階段的檢查,這時候可以使用any類型

使用any類型允許被賦值為任意類型,甚至可以調用其屬性、方法

1
2
3
let num:any = 123;
num = 'str';
num = true;

定義存儲各種類型數據的數組時,示例代碼如下:

1
2
let arrayList: any[] = [1, false, 'fine'];
arrayList[1] = 100;

null 和和undefined

JavaScriptnull表示”什麼都沒有”,是一個只有一個值的特殊類型,表示一個空對象引用,
undefined表示一個沒有設置值的變量

默認情況下nullundefined是所有類型的子類型,
就是說你可以把 nullundefined賦值給 number類型的變量

1
2
3
4
let num:number | undefined; // 數值類型 或者 undefined
console.log(num); // 正确
num = 123;
console.log(num); // 正确

但是TypeScript配置了--strictNullChecks標記,nullundefined只能賦值給void和它們自己

void

用於標識方法返回值的類型,表示該方法沒有返回值。

1
2
3
function hello(): void {
alert("Hello Runoob");
}

never

never是其他類型(包括nullundefined)的子類型,可以賦值給任何類型,代表從不會出現的值

但是沒有類型是never 的子類型,這意味著聲明 never 的變量只能被 never 類型所賦值。

never類型一般用來指定那些總是會拋出異常、無限循環

1
2
3
4
5
6
7
8
9
10
11
let a:never;
a = 123; // 錯誤的寫法

a = (() => { // 正確的寫法
throw new Error('错误');
})()

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

object

對像類型,非原始類型,常見的形式通過{}進行包裹

1
2
let obj:object;
obj = {name: 'Wang', age: 25};

總結

javascript基本一致,也分成:

  • 基本類型
  • 引用類型
    在基礎類型上,typescript增添了voidanyemum等原始類型

References

-基础类型介绍

你的支持是我活力的來源 :)