天天看點

《TypeScript》 - 變量聲明

變量是一種使用友善的占位符,用于引用計算機記憶體位址。

我們可以把變量看做存儲資料的容器。

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      
《TypeScript》 - 變量聲明

測試結果

類型斷言(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》 - 變量聲明

測試結果

類型推斷

當類型沒有給出時,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