千鋒教育前端TypeScript入門視頻教程(陸神頂配版TS入門教程)

TypeScript 基礎(chǔ)類型
js的數(shù)據(jù)類型?
number 、string、 null 、 undefined、 boolean、 object、?function、 array
ts新增的數(shù)據(jù)類型
any任意類型 enum 枚舉 聯(lián)合類型 字面量類型 unknown void
Boolean 類型
聲明一個(gè)變量flag,同時(shí)指定它的類型為boolean
const flag: boolean = true;
Number 類型
聲明一個(gè)變量a,同時(shí)指定它的類型為number
const count: number = 10;
String 類型
聲明一個(gè)變量str,同時(shí)指定它的類型為string
let name: string = "樹哥";
Enum?枚舉類型
枚舉類型用于定義數(shù)值集合,使用枚舉我們可以定義一些帶名字的常量。 使用枚舉可以清晰地表達(dá)意圖或創(chuàng)建一組有區(qū)別的用例。,如周一到周日,方位上下左右等
·??????普通枚舉
1. enum Color {
2. ??RED,
3. ??PINK,
4. ??BLUE,
5. }
6. ?
7. const red: Color = Color.RED;
8. console.log(red); // 0
初始值默認(rèn)為 0 其余的成員會(huì)會(huì)按順序自動(dòng)增長 可以理解為數(shù)組下標(biāo)
·??????設(shè)置初始值
1. enum Color {
2. ??RED = 2,
3. ??PINK,
4. ??BLUE,
5. }
6. const pink: Color = Color.PINK;
7. console.log(pink); // 3
·??????字符串枚舉
1. enum Color {
2. ??RED = "紅色",
3. ??PINK = "粉色",
4. ??BLUE = "藍(lán)色",
5. }
6. ?
7. const pink: Color = Color.PINK;
8. console.log(pink); // 粉色
·??????常量枚舉
使用 const 關(guān)鍵字修飾的枚舉,常量枚舉與普通枚舉的區(qū)別是,整個(gè)枚舉會(huì)在編譯階段被刪除 我們可以看下編譯之后的效果
1. const enum Color {
2. ??RED,
3. ??PINK,
4. ??BLUE,
5. }
6. ?
7. const color: Color[] = [Color.RED, Color.PINK, Color.BLUE];
8. console.log(color); //[0, 1, 2]
9. ?
10. //編譯之后的js如下:
11. var color = [0 /* RED */, 1 /* PINK */, 2 /* BLUE */];
12. // 可以看到我們的枚舉并沒有被編譯成js代碼 只是把color這個(gè)數(shù)組變量編譯出來了
Array 類型
對(duì)數(shù)組類型的定義有兩種方式:
1. ??const arr: number[] = [1,2,3];
2. ??const arr2: Array<number> = [1,2,3];
元組(tuple)類型
上面數(shù)組類型的方式,只能定義出內(nèi)部全為同種類型的數(shù)組。對(duì)于內(nèi)部不同類型的數(shù)組可以使用元組類型來定義
元組( Tuple )表示一個(gè)已知數(shù)量和類型的數(shù)組,可以理解為他是一種特殊的數(shù)組
元組,元組就是固定長度的數(shù)組???語法:[類型, 類型, 類型]
?const tuple: [number, string] = [1, "zhangmazi"];
需要注意的是,元組類型只能表示一個(gè)已知元素?cái)?shù)量和類型的數(shù)組,長度已指定,越界訪問會(huì)提示錯(cuò)誤。例如,一個(gè)數(shù)組中可能有多種類型,數(shù)量和類型都不確定,那就直接any[]。
undefined和null
默認(rèn)情況下 null 和 undefined 是所有類型的子類型。 也就是說你可以把 null 和 undefined 賦值給其他類型。
let a: undefined = undefined;
let b: null = null;
let str: string = 'zhangmazi';
str = null; // 編譯正確
str = undefined; // 編譯正確
如果你在tsconfig.json指定了"strictNullChecks":true ,即開啟嚴(yán)格模式后, null 和 undefined 只能賦值給 void 和它們各自的類型。 (這里感謝評(píng)論區(qū)指出) null 和 undefined 只能給它們自己的類型賦值
// 啟用 --strictNullChecks
let x: number;
x = 1; // 編譯正確
x = undefined;??// 編譯錯(cuò)誤
x = null;??// 編譯錯(cuò)誤
但是 undefined 可以給 void 賦值
let c:void = undefined // 編譯正確
let d:void = null // 編譯錯(cuò)誤
any 類型
any會(huì)跳過類型檢查器對(duì)值的檢查,任何值都可以賦值給any類型 any類型就是js(建議不要用)
ts會(huì)有命名規(guī)范,不能命名為any
any 表示的是任意類型,一個(gè)變量設(shè)置類型為any后相當(dāng)于對(duì)該變量關(guān)閉了TS的類型檢測
使用TS時(shí),不建議使用any類型
聲明變量如果不指定類型,則TS解析器會(huì)自動(dòng)判斷變量的類型為any (隱式的any)
any是可以賦值任何類型
?let value: any = 1;
?value = "zhangmazi"; // 編譯正確
?value = []; // 編譯正確
?value = {};// 編譯正確
void 類型
void 意思就是無效的, 一般只用在函數(shù)上,告訴別人這個(gè)函數(shù)沒有返回值。
?function sayHello(): void {
???console.log("hello 啊,樹哥!");
?}
never 類型
拋出異常
never 類型表示的是那些永不存在的值的類型。 例如never 類型是那些總是會(huì)拋出異?;蚋揪筒粫?huì)有返回值的函數(shù)表達(dá)式或箭頭函數(shù)表達(dá)式的返回值類型
值會(huì)永不存在的兩種情況:
·??????1 如果一個(gè)函數(shù)執(zhí)行時(shí)拋出了異常,那么這個(gè)函數(shù)永遠(yuǎn)不存在返回值(因?yàn)閽伋霎惓?huì)直接中斷程序運(yùn)行,這使得程序運(yùn)行不到返回值那一步,即具有不可達(dá)的終點(diǎn),也就永不存在返回了)
·??????2 函數(shù)中執(zhí)行無限循環(huán)的代碼(死循環(huán)),使得程序永遠(yuǎn)無法運(yùn)行到函數(shù)返回值那一步,永不存在返回。
// 異常
function error(msg: string): never { // 編譯正確
?throw new Error(msg);
}
?
// 死循環(huán)
function loopForever(): never { // 編譯正確
?while (true) { };
}
Unknown 類型
unknown與any一樣,所有類型都可以分配給unknown:
unknown 表示未知類型的值
只能賦值給unkonwn any
?let value: unknown = 1;
?value = "zhangmazi"; // 編譯正確
?value = false; // 編譯正確
unknown與any的最大區(qū)別是:
任何類型的值可以賦值給any,同時(shí)any類型的值也可以賦值給任何類型。unknown 任何類型的值都可以賦值給它,但它只能賦值給unknown和any