TS

  1. TypeScript具備類型系統,且是JavaScript的超集。它能夠編譯成普通的JavaScript代碼。 TypeScript支持任意瀏覽器,任意環境,任意系統而且是開源的。Ts主要用於解決那些問題:html

  • js木有編譯類型檢查,寫代碼的時候木有錯誤,在運行的時候就發現錯誤一大堆,ts具備類型系統,能夠解決此類問題
  • js代碼很是靈活,同一團隊中,大神和小菜鳥寫的代碼各不相同,維護起來十分不便,統一採用ts開發js,使用相同的規則進行編碼,可以比較好的解決此類問題
  • js發展十分迅速,存在各類各樣的版本和各類環境,在不一樣的環境中特性存在差別,爲了知足各類環境,須要編寫各異的代碼,js經過制定編譯環境能夠將同一代碼編譯成對應環境的js腳本
  • js在編譯大型項目缺少良好的模塊及文件的組織,須要支持有模塊及命名空間的概念,遵循CommonJs的規範,ts支持模塊及命名空間,同時支持。
  1. 環境

  2. 安裝

    node install –g typescriptnode

  3. VSC

  • tsconfig.json:指定ts編譯的一些參數信息

"compilerOptions":git

  1. Target:編譯目標平臺(es3,es5,e6,es2015)
  2. Module:組織代碼方式(commonjs,amd)
  3. sourceMap:編譯文件對應關係
  4. outDir:輸出目錄

"exclude":不包含的編譯目錄typescript

  • tasks.json:指定編譯的命令

    快捷鍵 ctrl+shift+p 調出命令窗口,選擇 Configure Task Runner 建立如圖所示json

參數 "args" 指代編譯的範圍數組

  1. 聲明

  2. var

    最經常使用的關鍵字,用來聲明對象,例如瀏覽器

    var關鍵存在一些弊端,例如:模塊化

  • 變量能夠重複聲明
  • 變量聲明能夠滯後
  • 沒有塊級做用域

  1. let

    爲了解決 var 關鍵字的以上弊端,提出了 let關鍵字,基本用法和var關鍵字同樣,以下:函數

  2. const

    定義的變量不能夠修改ui

  3. 類型

  • 布爾

簡單的true/false值

  • 數字

浮點型的數字

  • 字符串

  • 數組

在類型後面直接使用[]

使用Array泛型

  • 枚舉

enum 類型是對js類型的一個補充,使用枚舉類型能夠爲一組數值選擇一個友好的名稱

 

  1. 函數

  2. 完整函數類型

    完整函數類型包含兩部分:參數類型和返回值類型

    上訴寫法過於複雜,ts提供類型推斷,能夠簡化寫法,以下所示

  3. 參數類型

  • 默認參數

    默認參數能夠指定參數默認值,函數調用時能夠不用傳遞默認參數

  • 可選參數

    可選參數在參數後用 ? 來表示,可選參數只能在必須參數後

  • 剩餘參數

    剩餘參數表示不知道傳遞多個類型相同的參數可使用,剩餘參數只能用類型數組來表示,並在參數前加上省略號,剩餘參數只能是最後一個參數

  1. Lambda和this

    看以下所示的代碼,調用out函數的this 對象被指定爲全局變量致使調用失敗

    在ts中,函數表達式變爲使用lambda表達式( () => {} ),這樣就會在函數建立的時候就指定'this'值

    編譯後的結果以下所示

  2. 結構

    ts中類的基本結構如圖所示,在ts裏,每一個成員默認爲public的,也存在 private 及 protected,private只能在自身類可用,protected可在繼承類中使用

  3. 抽象類

    抽象類使用abstract關鍵字來定義抽象類和在抽象類內部定義抽象方法,抽象類只能用派生類實例化,抽象方法必須在派生類中實現

  4. 繼承

    面向對象最基本的模式就是對類型進行繼承擴展,如圖所示,Dog繼承了抽象類animal,實現了抽象方法say,並重寫了父類中的move方法

  5. 靜態成員

    類的靜態成員,這些屬性存在於類自己上面而不是類的實例上

  6. 接口

  7. 結構

    與C#或Java裏接口的基本做用同樣,ts也可以用它來明確的強制一個類去符合某種契約。以下所示,Squre類實現Shape接口。

  8. 繼承

    接口能夠繼承多個接口,使用extends關鍵字來繼承多個接口,以下所示

  9. 泛型

    ts像C#和Java,可使用泛型來建立可重用的組件,一個組件能夠支持多種類型的數據,ts中使用(<>)括起泛型類型

  10. 模塊

    爲了開發大型的代碼程序,模塊化是必須經歷的一個過程。ts組織代碼的方式主要包括內部使用的命名空間和外部使用的模塊。

  11. 命名空間

    當代碼變得複雜的時候,要一種手段來組織代碼,以便於在記錄它們類型的同時還不用擔憂與其它對象產生命名衝突,這時候咱們使用命名空間。命名空間內的代碼只在命名空間內纔是可見的,對外部不可見。

  12. 外部模塊

    模塊在其自身的做用域裏執行,在一個模塊裏的變量,函數,類等等在模塊外部是不可見的,除非你明確地使用export形式之一導出它們。相反,若是想使用其它模塊導出的變量,函數,類,接口等的時候,你必需要導入它們,可使用import形式之一。

    模塊是自聲明的;兩個模塊之間的關係是經過在文件級別上使用imports和exports創建的。

    任何聲明(好比變量,函數,類,類型別名或接口)都可以經過添加export關鍵字來導出,

    可使用如下import形式之一來導入其它模塊中的導出內容。

  • 導入一個模塊中的某個導出內容

  • 將整個模塊導入到一個變量,並經過它來訪問模塊的導出部分

CommonJS和AMD都有一個exports對象的概念,它包含了一個模塊的全部導出內容。ts模塊支持export =語法,以配合傳統的CommonJS和AMD的工做流。

export =語法定義一個模塊的導出對象。它能夠是類,接口,命名空間,函數或枚舉。

若要導入一個使用了export =的模塊時,必須使用TypeScript提供的特定語法import let = require("module")。

  1. 示例

  2. 編碼規範

  • 使用PascalCase爲類型命名。
  • 不要使用I作爲接口名前綴。
  • 使用PascalCase爲枚舉值命名。
  • 使用camelCase爲函數命名。
  • 使用camelCase爲屬性或本地變量命名。
  • 不要爲私有屬性名添加_前綴。
  • 1個文件對應一個邏輯組件(好比:解析器,檢查器)。
  • 不要導出類型/函數,除非你要在不一樣的組件中共享它。
  • 不要在全局命名空間內定義類型/值。
  • 共享的類型應該在types.ts裏定義。
  • 在一個文件裏,類型定義應該出如今頂部。
  • 使用  undefined,不要使用 null。
  • 因爲種種緣由,咱們避免使用一些方法,而使用咱們本身定義的。
  • 不使用ECMAScript 5函數;而是使用core.ts這裏的。
  • 不要使用for..in語句;而是使用ts.forEach,ts.forEachKey和ts.forEachValue。注意它們之間的區別。
  • 若是可能的話,嘗試使用ts.forEach,ts.map和ts.filter代替循環。
相關文章
相關標籤/搜索