TypeScript-(二)基本語法

值與變數

變數的型別

所有的值與變數都需要決定其型別,以下是 TypeScript 的幾種基本資料型別

  • 布林值(boolean):跟 JavaScript 一樣,是 true 或 false 這兩者之中期一的值。
  • 數值(number):所有的數值都被歸類為 number 的型別,並沒有分整數或浮點數。
  • 字串(string):前後以引號圈住的文字內容,都是為 string 型別。

變數的宣告

在變數的後方使用「冒號」,接著再輸入型別,這樣的變數就只能存入指定型別的值。

1
2
var 變數:型別;
var 變數:零別 = 值;

而實際上,這個「指定型別」的宣告動作並非必須,如果還是按照 JavaScript 的寫法「var 變數 = 值;」也不會出錯影響程式碼運作。可是既然都已經導入 TypeScript,不使用它「指定型別」的優點,就失去了原有的用意。

偶爾可能會需要「可以接受任何型別的變數」,可以使用「any」型別來宣告變數。

1
2
var 變數:any;
var 變數:零別 = 值;

型別的運作

在 TypeScript 原始碼中,在宣告變數時無論有沒有指定型別,在編譯後的 JavaScript 程式碼基本市長一樣的。那麼「指定型別的意義」是什麼?

最主要是,如果有指定型別,那在編譯過程中會去檢查變數的值是否符合型別,如果型別不符就會出現錯誤無法完成編譯動作。而通過編譯的程式碼,就可以確保最後產生的程式碼不會發生「存入不同型別」造成的問題。

var、let 與 const

一般變數宣吿 var

以 var 進行宣告,除了在函式內進行宣告以外,皆被視為全域變數,函式內的變數則只能在函式範圍內使用。

另外,var 可以針對同一個變數名稱進行重複宣告,如下:

1
2
var a:any = 1;
var a:any = "hello";

可是要注意一點,當 var 變數有指定型別,再次宣告時就不能改變為其他型別,如下案例會發生錯誤:

1
2
var a:number = 1;
var a:string = "hello"; //錯誤

區域變數宣吿 let

以 let 進行宣告,只能在一個 block 中被使用,脫離該範圍就無法使用這個變數。

且,不能重複宣告,如下:

1
2
let a:any = 1;
let a:any = "hello";//錯誤

如果要重新賦值變數,只需要用等號指派新的值,如下:

1
2
let a:any = 1;
any = "hello";

常數宣告 const

以 const 進行宣告,後續將無法改變其儲存的內容值。

1
2
const a:any = 1;
any = "hello";//錯誤

另外,const 跟 let 一樣具備 block 的性質,如果脫離的範圍就無法使用這個變數。

陣列的宣告

在零別後面加上中括號,即代表這個變數是陣列。但是要注意的是,TypeScript 跟 JavaScript的陣列不同,在TypeScript中的陣列「不可以存入不同型別的內容值」。

1
var 變數:型別[] = [...陣列內容值...];

型別的別名

如果變數命名很明確,就很容易理解當中儲存的型別,如下:

1
2
let email:string;
let phone:string;

但是如果遇到變數命名曖昧不明的狀況,就比較難理解變數儲存的內容,如下:

1
2
let a:string;
let b:string;

因此 TypeScript 可以對型別設定其別名(Alias),設定方法如下:

1
type 別名 = 型別;

因此就可以在宣告變數之前,先設定不同的 string 別名,之後在宣告變數的型別時,以別名取代 string 型別做指定。如下方案例,就可以更加容易解讀程式碼。

1
2
3
4
type email = string;
type phone = string;
let a:email;
let b:phone;

列舉型別(enum)

TypeScript 增加了 JavaScript 中沒有的新型別,最有特色的就是「列舉型別」,只能預先存入固定數量內容值的型別,建立後無法再存入其他值,它能把變數在某些限制下進行存取並賦予其定義。

1
enum 型別名稱 {值1, 值2, ...};

先使用自訂名稱的列舉型別,之後就可以跟普通型別的使用方式一樣,如下範例:

1
2
3
4
5
6
7
8
9
10
enum Season {spring, summer, autumn, winter};

let s:Season = Season.summer;

if (s == Season.spring) {
console.log("It's spring!");
}

console.log(Season[0]);//印出 "spring"
console.log(Week["spring"]); //印出 0

「s:Season」的 Session 被視為一種型別,此 Season 型別的內容值需要以「型別名稱.值」的方式來表達。

Tuple 型別

Tuple 是多個值的集合,可以想像成「需要逐一指定每個內容值型別的陣列」。

1
2
let 變數:[型別1, 型別2, ...];
變數 = [值1, 值2, ...];

如下範例:

1
2
3
4
5
6
7
type name = string;
type phone = string;
enum gender {male,female};
type age = number;

let member:[name, phone, gender, age];
member = ["Amy", "09123456789",gender.female,20];

將 Tuple 型別跟陣列做結合,以下更進一步案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
type name = string;
type phone = string;
enum gender {male,female};
type age = number;

type member = [name, phone, gender, age];

let data:member[] = [];
data.push("Amy", "09123456789",gender.female,20]);
data.push("Peter", "0987654321",gender.male,18]);

console.log(data[0]);//印出 Amy, 09123456789,1,20
console.log(data[1]);//印出 Peter, 0987654321,0,18

© 2020 Leah's Blog All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero