一、基礎語法
TypeScript由以下幾個部分組成
1.模塊
2.函數
3.變量
4.語句和表達式
5.注釋
示例:
Runoob.ts 文件代碼:
const hello : string = "Hello World!"
console.log(hello)
以上代碼首先通過?tsc?命令編譯:
tsc Runoob.ts
Runoob.js 文件代碼:?
var hello = "Hello World!";
console.log(hello);
最后我們使用 node 命令來執行該 js 代碼。
$ node Runoob.js
Hello World
tsc 常用編譯參數如下表所示:
序號 | 編譯參數說明 |
---|---|
1. | --help 顯示幫助信息 |
2. | --module 載入擴展模塊 |
3. | --target 設置 ECMA 版本 |
4. | --declaration 額外生成一個 .d.ts 擴展名的文件。 tsc ts-hw.ts --declaration 以上命令會生成 ts-hw.d.ts、ts-hw.js 兩個文件。 |
5. | --removeComments 刪除文件的注釋 |
6. | --out 編譯多個文件并合并到一個輸出的文件 |
7. | --sourcemap 生成一個 sourcemap (.map) 文件。 sourcemap 是一個存儲源代碼與編譯代碼對應位置映射的信息文件。 |
8. | --module noImplicitAny 在表達式和聲明上有隱含的 any 類型時報錯 |
9. | --watch 在監視模式下運行編譯器。會監視輸出文件,在它們改變時重新編譯。 |
TypeScript 保留關鍵字:
break | as | catch | switch |
case | if | throw | else |
var | number | string | get |
module | type | instanceof | typeof |
public | private | enum | export |
finally | for | while | void |
null | super | this | new |
in | return | true | false |
any | extends | static | let |
package | implements | interface | function |
do | try | yield | const |
continue |
空白和換行:
TypeScript會忽略程序中出現的空格,制表符和換行符
空格,制表符通常用來縮進代碼,使代碼易于閱讀和理解
TypeScript區分大小寫字符
分號是可選的
單行指令都是一段語句,可以使用分號或不使用,建議使用
TypeScript與面向對象
面向對象是一種對現實世界理解和抽象的方法
TypeScript是一種面向對象的編程語言
面向對象主要有兩個概念:對象和塊
? ? ? ? 對象:對象是類的一個實例,有狀態和行為
? ? ? ? 類:類是一個模板,描述的是一類對象的行為和狀態
? ? ? ? 方法:方法是類的操作的實現步驟
示例:
TypeScript面向對象編程
class Site { name():void { console.log("Runoob") }
}
var obj = new Site();
obj.name();
以上示例定義了一個類Site,該類有一個方法name(),該方法在終端上輸出字符串Runoob
new關鍵字創建類的對象,該對象調用方法name(),
編譯后生成的JavaScript
var Site = /** @class */ (function () {function Site() {}Site.prototype.name = function () {console.log("Runoob");};return Site;
}());
var obj = new Site();
obj.name();
二、基礎類型
數據類型 | 關鍵字 | 描述 |
---|---|---|
任意類型 | any | 聲明為 any 的變量可以賦予任意類型的值。 |
數字類型 | number | 雙精度 64 位浮點值。它可以用來表示整數和分數。 let binaryLiteral: number = 0b1010; // 二進制 let octalLiteral: number = 0o744; // 八進制 let decLiteral: number = 6; // 十進制 let hexLiteral: number = 0xf00d; // 十六進制 |
字符串類型 | string | 一個字符系列,使用單引號(')或雙引號(")來表示字符串類型。反引號(`)來定義多行文本和內嵌表達式。 let name: string = "Runoob"; let years: number = 5; let words: string = `您好,今年是 ${ name } 發布 ${ years + 1} 周年`; |
布爾類型 | boolean | 表示邏輯值:true 和 false。 let flag: boolean = true; |
數組類型 | 無 | 聲明變量為數組。 // 在元素類型后面加上[] let arr: number[] = [1, 2];// 或者使用數組泛型 let arr: Array<number> = [1, 2]; |
元組 | 無 | 元組類型用來表示已知元素數量和類型的數組,各元素的類型不必相同,對應位置的類型需要相同。 let x: [string, number]; x = ['Runoob', 1]; // 運行正常 x = [1, 'Runoob']; // 報錯 console.log(x[0]); // 輸出 Runoob |
枚舉 | enum | 枚舉類型用于定義數值集合。 enum Color {Red, Green, Blue}; let c: Color = Color.Blue; console.log(c); // 輸出 2 |
void | void | 用于標識方法返回值的類型,表示該方法沒有返回值。 function hello(): void {alert("Hello Runoob"); } |
null | null | 表示對象值缺失。 |
undefined | undefined | 用于初始化變量為一個未定義的值 |
never | never | never 是其它類型(包括 null 和 undefined)的子類型,代表從不會出現的值。 |
注:TypeScript和JavaScript沒有整數類型
1.Any類型
任意值是TypeScript針對編程時類型不明確的變量使用的一種數據類型
1.變量的值會動態改變時,比如來自用戶的輸入,任意值類型可以讓這些變量跳過編譯器階段的類型檢查
let x: any = 1; // 數字類型
x = 'I am who I am'; // 字符串類型
x = false; // 布爾類型
2.改寫現有代碼時,任意值允許在編譯時可選擇地包含或移除類型檢查
let arrayList: any[] = [1, false, 'fine'];
arrayList[1] = 100;
2.Null和Undefined
null
在JavaScript中null表示"什么都沒有",是一個只有一個值的特殊類型,表示一個空對象的引用
用TypeScript檢測null返回是object
undefined
在JavaScript中,underfined是一個沒有設置值的變量
typeof一個沒有值的變量會返回undefined
null和undefined是其他任何類型(包括void)的子類型,可以賦值給其他類型,
而在JavaScript中,啟用嚴格的空校驗(--strictNullChecks)特性,就可以使得null和underfined只能被賦值給void或本身對應的類型:
// 啟用 --strictNullChecks
let x: number;
x = 1; // 編譯正確
x = undefined; // 編譯錯誤
x = null; // 編譯錯誤
上面例子的變量x只能是number類型,如果一個類型可能出現null或undefined,可以用 | 來支持多種類型
// 啟用 --strictNullChecks
let x: number | null | undefined;
x = 1; // 編譯正確
x = undefined; // 編譯正確
x = null; // 編譯正確
3.never類型
never是其他類型(包括null和undefined)的子類型,代表從不會出現的值,這意味著never只能被never類型所賦值,在函數中通常表現為拋出異常或無法執行到終點(例如無限循環)
let x: never;
let y: number;// 編譯錯誤,數字類型不能轉為 never 類型
x = 123;// 運行正確,never 類型可以賦值給 never類型
x = (()=>{ throw new Error('exception')})();// 運行正確,never 類型可以賦值給 數字類型
y = (()=>{ throw new Error('exception')})();// 返回值為 never 的函數可以是拋出異常的情況
function error(message: string): never {throw new Error(message);
}// 返回值為 never 的函數可以是無法被執行到的終止點的情況
function loop(): never {while (true) {}
}