typescript學習(一)
基礎型別
1、布林值
let isDone: boolean = false;
2、數字
和JavaScript一樣,TypeScript裡的所有數字都是浮點數。 這些浮點數的型別是 number
。
let decLiteral: number = 6;十進位制
let hexLiteral: number = 0xf00d;十六進位制
let binaryLiteral: number = 0b1010;2進位制
let octalLiteral: number = 0o744;8進位制
3、字串
let name: string = "bob";name = "smith";
模版字串,它可以定義多行文字和內嵌表示式。 這種字串是被反引號包圍( `
)(可以實現輸入分行),並且以${ expr }
這種形式嵌入表示式。
let name: string = `Gene`;let age: number = 37;let sentence: string = `Hello, my name is ${ name }.I'll be ${ age + 1 } years old next month.`;
4、陣列
有兩種方式可以定義陣列。 第一種,可以在元素型別後面接上[];第二種方式是使用陣列泛型,
Array<元素型別>
。
let list: number[] = [1, 2, 3];
let list: Array<number
5、元組 Tuple
元組型別允許表示一個已知元素數量和型別的陣列,各元素的型別不必相同。 比如,你可以定義一對值分別為string
和number
型別的元組。
// Declare a tuple typelet x: [string, number];// Initialize itx = ['hello', 10]; // OK// Initialize it incorrectlyx = [10, 'hello']; // Erro
6、列舉
enum
型別是對JavaScript標準資料型別的一個補充。 像C#等其它語言一樣,使用列舉型別可以為一組數值賦予友好的名字
enum Color {Red, Green, Blue}
預設情況下,從0
開始為元素編號。 你也可以手動的指定成員的數值。 例如,我們將上面的例子改成從 1
開始編號:
enum Color {Red = 1, Green, Blue}let c: Color = Color.Green;
7、Any
有時候,我們會想要為那些在程式設計階段還不清楚型別的變數指定一個型別。 這些值可能來自於動態的內容,比如來自使用者輸入或第三方程式碼庫。 這種情況下,我們不希望型別檢查器對這些值進行檢查而是直接讓它們通過編譯階段的檢查。 那麼我們可以使用 any
型別來標記這些變數:
let notSure: any = 4;notSure = "maybe a string instead";notSure = false; // okay, definitely a boolean
在對現有程式碼進行改寫的時候,
any
型別是十分有用的,它允許你在編譯時可選擇地包含或移除型別檢查。 你可能認為 Object
有相似的作用,就像它在其它語言中那樣。 但是 Object
型別的變數只是允許你給它賦任意值 - 但是卻不能夠在它上面呼叫任意的方法,即便它真的有這些方法:
let notSure: any = 4;notSure.ifItExists(); // okay, ifItExists might exist at runtimenotSure.toFixed(); // okay, toFixed exists (but the compiler doesn't check)let prettySure: Object = 4;prettySure.toFixed(); // Error: Property 'toFixed' doesn't exist on type 'Object'.
當你只知道一部分資料的型別時,
any
型別也是有用的。 比如,你有一個數組,它包含了不同的型別的資料:
let list: any[] = [1, true, "free"];list[1] = 100;
8、Void
某種程度上來說,void
型別像是與any
型別相反,它表示沒有任何型別。 當一個函式沒有返回值時,你通常會見到其返回值型別是 void
:
function warnUser(): void { alert("This is my warning message");}
宣告一個void
型別的變數沒有什麼大用,因為你只能為它賦予undefined
和null
:
// Not much else we can assign to these variables!
let u: undefined = undefined;
9、Null 和 Undefined
預設情況下null
和undefined
是所有型別的子型別。 就是說你可以把 null
和undefined
賦值給number
型別的變數。
然而,當你指定了--strictNullChecks
標記,null
和undefined
只能賦值給void
和它們各自。
10、型別斷言
其一是“尖括號”語法,另一個為as
語法。11、let
11、1 let與var的區別
在TypeScript中,定義變數要用關鍵字var或者let。let是一種新的var,let和var的區別就是let使js實現了它的塊級作用域,即詞法作用域或塊作用域(注:let可以看成var,它定義的變數被限制在特定範圍中才能使用,離開這個範圍就自動銷燬)。
我們使用let
關鍵字來代替大家所熟悉的JavaScript關鍵字var
。
let宣告,必須為建構函式、方法、訪問器或屬性。
11、2 JavaScript的嚴格模式
除了正常執行模式,ECMAscript 5添加了第二種執行模式:"嚴格模式"(strict mode)。顧名思義,這種模式使得Javascript在更嚴格的條件下執行。
"嚴格模式"體現了Javascript更合理、更安全、更嚴謹的發展方向,包括IE 10在內的主流瀏覽器,都已經支援它,許多大專案已經開始全面擁抱它。
另一方面,同樣的程式碼,在"嚴格模式"中,可能會有不一樣的執行結果;一些在"正常模式"下可以執行的語句,在"嚴格模式"下將不能執行。掌握這些內容,有助於更細緻深入地理解Javascript,讓你變成一個更好的程式設計師。
進入"嚴格模式"的標誌,是下面這行語句:
"use strict";
老版本的瀏覽器會把它當作一行普通字串,加以忽略。
11、3 var作用域
這是因為var宣告可以在包含它的函式,模組,名稱空間或全域性作用域內部任何位置被訪問,包含它的程式碼塊對此沒有什麼影響。 有些人稱此為var作用域或函式作用域。 函式引數也使用函式作用域。
這些作用域規則可能會引發一些錯誤。 其中之一就是,多次宣告同一個變數並不會報錯: