TypeScript基礎知識-基本類型(一)
// 字符 - 模板字符串 佔位符 let a: string = "a"; let b: string = "b";
// number數組
let devLiteral: number = 6; // 6 let hexLiteral: number = 0x12; // 18 let binaryLiteral: number = 0b11; // 3 let octalLiteral: number = 0o11; // 8
// Boolean let isBoolean1: boolean = true;
// Array 數據類型+[]、泛型數組 let arr1: string[] = ["test1", "test2", "test3"]; let arr2: Array<string> = ["test1", "test2", "test3"];
// 上述兩種方式定義數組類型約束了數組內的元素類型必須一致 // 元祖 Tuple 放寬數據內數據類型 - 已知元素的數量與類型的數組 // tuple 數組類型必須與規定的類型順序對應起來 let tuple1: [string, number]; tuple1 = ["test", 1]; // tuple1[3] = 'a'; // error
// enum 枚舉 給數字更加易懂的名字, 能夠同時經過索引或者字符訪問 // 默認狀況下,從0開始爲一個元素編號 enum Color { blue, red, yellow } let colorName: string = Color[2]; // yellow enum Color { Red = "RED", Green = "GREEN", Blue = "BLUE" } let colorName2: string = Color["RED"]; console.log(colorName); // 字符串枚舉成員不能反向映射到枚舉成員的名字
// any 類型 標識JS任意類型的值 // Any類型變量能夠被賦值給任何類型數據 // Any類型數據能夠賦值給任何數據類型變量(除never外) // 若是是Any類型,那麼能夠訪問它的任意屬性 // Any類型對象的任意屬性都是Any類型 // Any類型數據能夠當作函數或者構造函數調用, 能夠有任意參數 // 若是沒有給出明確的數據類型,而且編譯器沒法腿推斷,那麼將被規定爲Any類型 let anyValue: any = 8; anyValue.toFixed(); let obj: { a; b }; // 等同於 let obj: { a: any; b: any; };
// Void類型 沒有返回值 變量值只能是undefined、null // void類型是any的子類型,是null和undefined的父類型 let void1: void = null; let void2: void = undefined; let temp1: any = 1; let void3: void = temp1; let void4: void = void 0; temp1 = void4; // any > void > null、undefined void是any類型的子類型,是null、undefined的父類型 let temp: number; let any: any = '8'; temp = any; // 默認狀況下null和undefined是全部類型的子類型,也就是能夠 // 賦值給其餘任何類型 // 可是不能複製給never類型 // 當指定--strictNullChecks標記,null和undefined只能賦值給void和它們各自,能夠避免不少問題 let u: undefined = undefined; let n: null = null; let num: number; num = undefined; num = null;
// Never類型 那些用不存在的值的類型 let neverVar: never; // 老是拋出異常或根本就不會有返回值的函數表達式或箭頭函數表達式的返回值 // 變量也多是Never類型,當他們被永不爲真的類型保護所約束時 // Never類型時任何類型的子類型,能夠賦值給任何類型,只有自身能夠賦值 // 即便Any類型也不行
// <T>e // e能夠賦值給類型爲T的變量 // T類型值能夠賦值給e的數據類型的widened form的變量 // widened類型根據上下文來推斷變量的類型,無需標註 let str5: string = 'testStr5'; let num5: number = <number><any>str5; // 當爲變量、屬性或者函數推斷類型的時候,Widened類型將會被使用。 // 一個類型的Widened形式就是將原始數據中的null或者undefined的數據類型由Any類型替換。
// this指向問題 // 嚴格模式 非函數模式調用this爲undefined,非嚴格模式this會指向全局對象 // 箭頭函數與ES6一致