轉載:https://github.com/MyErpSoft/TypeScript-Handbook/blob/master/pages/zh-CHS/Basic%20Types.md
概述
為了讓程序更易用,我們兼容幾種最基本的數據類型:numbers(數字),strings(字符串),structures(結構),boolean(布爾值)等等。在 TypeScript 中,我們支持和 Javascript 幾乎一樣多的類型,並且新增了實用的枚舉類型。
Boolean 布爾值
最基礎的數據類型就是簡單的 true(真)/false(假) ,在 Javascript 和 TypeScript (以及其他語言)中被稱作是 "boolean(布爾值)"。
var isDone: boolean = false;
Number 數字
和 Javascript 一樣,在 TypeScript 中所有的number都是浮點值。 TypeScript 除了支持ECMAScript 2015中的十六進制和十進制外,還支持二進制和二進制類型。
var decLiteral: number = 6; var hexLiteral: number = 0x9837abdef; var binaryLiteral: number = 0b0010; var octalLiteral: number = 0o74563;
String 字符串
在使用JavaScript創建網頁或應用程序時,要用到很基礎的功能是處理字符串,和其他語言一樣,我們使用 "string" 類型來表示那些文本數據。和 JavaScript 一樣,TypeScript 也使用雙引號或單引號來圍繞字符串數據。
var name: string = "bob"; name = 'smith';
你也可以使用 模板字符串,他能支持多行文本和內嵌表達式。這些字符串使用單引號(`
)包圍,並且嵌入的表達式使用${ expr }
這樣的形式表示。
var name: string = `Gene`; var age: number = 37; var sentence: string = `Hello, my name is ${ name }. I'll be ${ age + 1 } years old next month.`
上面的表達式相當於下面的聲明方式:
var sentence: string = "Hello, my name is " + name + ".\n\n" +
"I'll be " + (age + 1) + " years old next month."
Array 數組
TypeScript 和 Javascript 一樣,允許你使用數組。數組類型的定義可以有兩種寫法。第一種寫法,你在數組元素類型后面添加‘[]’來表示這是一個該類型的數組:
var list: number[] = [1, 2, 3];
第二種寫法使用一種通用的數組類型表示,Array<數組元素類型>:
var list: Array<number> = [1, 2, 3];
Tuple 元組
元組類型允許表達固定數量的已知類型集合,但這些類型不必是相同的。例如,您可能想表示一個'string和
number`組合的類型:
// 聲明一個元組類型 var x: [string, number]; // 初始化他 x = ['hello', 10]; // 准確 // 錯誤的初始化 x = [10, 'hello']; // 錯誤
我們可以使用數字檢索一個已知的元素,但需要注意類型正確。
console.log(x[0].substr(1)); // 正確 console.log(x[1].substr(1)); // 錯誤,'number' 類型沒有 'substr' 方法
當訪問的索引超過邊界時,將使用聯合類型處理:
x[3] = 'world'; // 正確,string允許被分配到 (string | number) console.log(x[5].toString()); // 正確,'string' 和 'number' 都有 toString 方法 x[6] = true; // 錯誤,布爾值不是 (string | number) 中的一種
聯合類型是更高級的議題,我們會在后續的章節中介紹。
Enum 枚舉
TypeScript拓展了JavaScript原生的標准數據類型集,增加了枚舉類型(enum)。枚舉是一種很有用的數據類型,就像C#等語言中一樣,它提供了一種給數字類型的值,設置易於辨別的名字的方法。
enum Color {Red, Green, Blue}; var c: Color = Color.Green;
在默認情況下,枚舉類型會從數字0開始標記它的元素。我們可以通過人為地設置元素的數值來改變默認值。例如,上面的例子我們可以設置成從1開始計數:
enum Color {Red = 1, Green, Blue}; var c: Color = Color.Green;
我們甚至可以給所有的枚舉元素設置數值:
enum Color {Red = 1, Green = 2, Blue = 4}; var c: Color = Color.Green;
枚舉類型有一個便捷特性,我們也可以直接用數值來查找其對應的枚舉元素的名稱。舉例來說,如果我們有一個值為2,但我們不確定這個數值對應枚舉類型中的哪個元素,那我們可以直接查找這個數值對應的名稱:
enum Color {Red = 1, Green, Blue}; var colorName: string = Color[2]; alert(colorName);
Any
當我們編寫應用時,我們可能會需要描述一些類型不明確的變量。因為這些變量的值可能來源於一些動態的內容,如用戶或第三方提供的庫。在這種情況下,我們需要略過對這些變量進行的類型檢查,讓它們直接通過編譯時的檢查。為了實現這一目的,我們可以把它們標識為'any'類型:
var notSure: any = 4; notSure = "maybe a string instead"; notSure = false; // okay, definitely a boolean
使用'any'類型是處理我們已有的JavaScript代碼的一種強大的方式,我們可以用它來逐漸增加或減少在編譯過程中的類型檢查。 就像其他編程語言那樣,你可能期望使用Object
來實現這個功能,但是注意在JavaScript中,Object
類型僅僅允許分配任意值給他,但不能調用他的存在或可能的任何方法:
var notSure: any = 4; notSure.ifItExists(); // 沒問題,在運行時有可能有 ifItExists 這個方法 notSure.toFixed(); // 沒問題,toFixed 是真實存在的方法 (但是編譯器不會驗證准確性) var prettySure: Object = 4; prettySure.toFixed(); // 錯誤,不行就是不行了,使用any吧
當我們知道一個類型的部分數據類型,卻又不確定所有的數據類型時,使用'any'可以為我們提供不少方便。比如你有一個數組,但是這個數組中的元素屬於不同的數據類型,那你可以這么做:
var list: any[] = [1, true, "free"]; list[1] = 100;
Void
void
就像any
的相反面:void就是沒有,any就是所有。沒有返回值的函數就可以認為是'void'類型:
function warnUser(): void { alert("This is my warning message"); }
不建議聲明一個變量是 void
類型,因為這個變量就只能賦值undefined
或 null
。
var unusable: void = undefined;