2019年,TypeScript已經開始漸漸的嶄露頭角,各大框架都說要使用TypeScript,雖然現在還沒有完美,但是TypeScript很有可能會成為下一個主流技術。
廢話就不多說了,直接開始吧。
首先了解TypeScript
TypeScript 是 JavaScript 的一個超集,支持 ECMAScript 6 標准。
TypeScript 由微軟開發的自由和開源的編程語言。
TypeScript 設計目標是開發大型應用,它可以編譯成純 JavaScript,編譯出來的 JavaScript 可以運行在任何瀏覽器上。
語言特性
TypeScript 是一種給 JavaScript 添加特性的語言擴展。增加的功能包括:
- 類型批注和編譯時類型檢查
- 類型推斷
- 類型擦除
- 接口
- 枚舉
- Mixin
- 泛型編程
- 名字空間
- 元組
- Await
以下功能是從 ECMA 2015 反向移植而來:
- 類
- 模塊
- lambda 函數的箭頭語法
- 可選參數以及默認參數
JavaScript 與 TypeScript 的區別
TypeScript 是 JavaScript 的超集,擴展了 JavaScript 的語法,因此現有的 JavaScript 代碼可與 TypeScript 一起工作無需任何修改,TypeScript 通過類型注解提供編譯時的靜態類型檢查。
TypeScript 可處理已有的 JavaScript 代碼,並只對其中的 TypeScript 代碼進行編譯。
TypeScript 安裝
如果已經安裝了node,並且已經配置的話,直接輸入下面的命令安裝就可以了,安裝的位置會在你配置的文件夾里面,如果沒有安裝node的話請參考我的《vue搭建環境》一文
npm install -g typescript
安裝完之后,查看版本號:
tsc -v
通常我們使用 .ts 作為 TypeScript 代碼文件的擴展名。
將TypeScript編譯成JavaScript
tsc xxx.ts
編譯之后會在xxx.ts同文件夾下生成一個xxx.js文件,可以通過node依賴來運行,或直接當作普通js來使用
圖文實例:
1.先創建一個后綴為ts的文件,這里為 test.ts
2.使用命令行工具或git打開test.ts所在文件夾,輸入:tsc test.ts 注:(ts代表的是typeScript, c 代表的是編譯輸出)
3.打開test.ts文件夾,就可以看到生成了一個名為test.js的文件
4.通過node依賴,運行test.js,在命令行工具輸入:node test.js 就能運行輸出結果了,或者直接當成普通腳本在html代碼上引用輸出也行
這樣你就創建了你的第一個TypeScript和進行了編譯了,下面繼續學習
TypeScript 基礎語法
TypeScript的基礎語法不多,可以說學習起來會比學javascript快很多。
TypeScript 程序由以下幾個部分組成:
- 模塊
- 函數
- 變量
- 語句和表達式
- 注釋
和javascript一樣,TypeScript也區分大小寫,也會忽略程序中出現的空格、制表符和換行符。空格、制表符通常用來縮進代碼,使代碼易於閱讀和理解。
TypeScript 與面向對象
TypeScript 是一種面向對象的編程語言。面向對象主要有兩個概念:對象和類。(具體概念和javascript差不多就不描述了)
看實例更實際:
編譯方法上面已經說過了,直接看效果
實際上編譯成js之后的代碼是這樣的:
TypeScript 基礎類型
TypeScript的基礎類型很神奇,它有一個類型叫任意類型 any
下面是它的數據類型:
任意類型 關鍵字 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];
null 關鍵字:null 類型描述:表示對象值缺失。
undefined 關鍵字:undefined 類型描述:用於初始化變量為一個未定義的值
never 關鍵字:never 類型描述:never 是其它類型(包括 null 和 undefined)的子類型,代表從不會出現的值。
1.Any 類型
任意值是 TypeScript 針對編程時類型不明確的變量使用的一種數據類型,它常用於以下三種情況。
1.<p>1、變量的值會動態改變時,比如來自用戶的輸入,任意值類型可以讓這些變量跳過編譯階段的類型檢查,示例代碼如下:</p> let x: any = 1; // 數字類型 x = 'I am who I am'; // 字符串類型 x = false; // 布爾類型
2.改寫現有代碼時,任意值允許在編譯時可選擇地包含或移除類型檢查,示例代碼如下
let x: any = 4; x.ifItExists(); // 正確,ifItExists方法在運行時可能存在,但這里並不會檢查 x.toFixed(); // 正確
3.定義存儲各種類型數據的數組時,示例代碼如下:
let arrayList: any[] = [1, false, 'fine']; arrayList[1] = 100;
2.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) {} }