變量是一種使用友善的占位符,用于引用計算機記憶體位址。
我們可以把變量看做存儲資料的容器。
TypeScript 變量的命名規則:
-
- 變量名稱可以包含數字和字母。
- 除了下劃線 _ 和美元 $ 符号外,不能包含其他特殊字元,包括空格。
- 變量名不能以數字開頭。
變量使用前必須先聲明,我們可以使用 var/let/const來聲明變量。
我們可以使用以下四種方式來聲明變量:
聲明變量的類型及初始值:
var [變量名] : [類型] = 值;
聲明變量的類型,但沒有初始值,變量值會設定為 undefined:
var [變量名] : [類型];
聲明變量并初始值,但不設定類型,該變量可以是任意類型:
var [變量名] = 值;
聲明變量沒有設定類型和初始值,類型可以是任意類型,預設初始值為 undefined:
var [變量名];
代碼示例:
let uname: string = 'zzh';
let uage: number;
let height = 1.72;
let weight;
console.log(uname); // zzh
console.log(uage); // undefined
console.log(height); // 1.72
console.log(weight); // undefined

測試結果
類型斷言(Type Assertion)
類型斷言可以用來手動指定一個值的類型,即允許變量從一種類型更改為另一種類型。
文法格式:
<類型>值
或:
值 as 類型
代碼示例:
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;
let someValue1: any = "this is a string";
let strLength1: number = (someValue1 as string).length;
唯一差別是,在JSX中,尖擴号與JSX文法沖突,隻能使用as關鍵字。
TypeScript 是怎麼确定單個斷言是否足夠
當 S 類型是 T 類型的子集,或者 T 類型是 S 類型的子集時,S 能被成功斷言成 S。這是為了在進行類型斷言時提供額外的安全性,完全毫無根據的斷言是危險的,如果你想這麼做,你可以使用 any。
它之是以不被稱為類型轉換,是因為轉換通常意味着某種運作時的支援。但是,類型斷言純粹是一個編譯時文法,同時,它也是一種為編譯器提供關于如何分析代碼的方法。
代碼示例中,因為someValue本身就是string類型,是以可以斷言為string。如果斷言成其他類型,也依舊不會改變someValue的類型,而且還不會報錯如下:
測試結果
類型推斷
當類型沒有給出時,TypeScript 編譯器利用類型推斷來推斷類型。
如果由于缺乏聲明而不能推斷出類型,那麼它的類型被視作預設的動态 any 類型。
var num = 2; // 類型推斷為 number
console.log("num 變量的值為 "+num);
num = "12"; // 編譯錯誤
console.log(num);
第一行代碼聲明了變量 num 并=設定初始值為 2。 注意變量聲明沒有指定類型。是以,程式使用類型推斷來确定變量的資料類型,第一次指派為 2,num 設定為 number 類型。
第三行代碼,當我們再次為變量設定字元串類型的值時,這時編譯會錯誤。因為變量已經設定為了 number 類型。
變量作用域
變量作用域指定了變量定義的位置。
-
- 全局作用域 − 全局變量定義在程式結構的外部,它可以在你代碼的任何位置使用。
- 類作用域 − 這個變量也可以稱為 字段。類變量聲明在一個類裡頭,但在類的方法外面。 該變量可以通過類的對象來通路。類變量也可以是靜态的,靜态的變量可以通過類名直接通路。
-
局部作用域 − 局部變量,局部變量隻能在聲明它的一個代碼塊(如:方法)中使用。
代碼示例:
class Numbers {
num_val = 13; // 執行個體變量
static sval = 10; // 靜态變量
storeNum():void {
var local_num = 14; // 局部變量
}
}
console.log("全局變量為: "+global_num) // 全局變量為: 12
console.log(Numbers.sval) // 10 // 靜态變量
var obj = new Numbers();
console.log("執行個體變量: "+obj.num_val) // 執行個體變量: 13