SlideShare a Scribd company logo
1 of 27
TypeScript 開發實戰
    開發即時互動的 HTML5 WebSocket 聊天室應用程式



              多奇數位創意有限公司

              技術總監 黃保翕 ( Will 保哥 )

              部落格:http://blog.miniasp.com/




1
All services from your imperative.




    JavaScript for tools

    TYPESCRIPT 簡介



2
TYPESCRIPT 簡介
       All services from your imperative.


      TypeScript = "靜態型別" + "動態型別" 程式語言
         用「靜態型別」語法來描述 JavaScript 的動態型別
      TypeScript 語法涵蓋完整 JavaScript 語法
         TypeScript = JavaScript + OOP語法
         支援 class (類別)、interface (介面)、module (模組)
      TypeScript 最終將編譯成 JavaScript (無靜態型別)
         語法相容於 ECMAScript 3 (ES3)
         Any browser. Any host. Any OS. (含Node.js)
         TypeScript 是一個工具語言!(適用於開發時期)
      TypeScript 適合用來開發 Web 應用程式
         靜態型別, 編譯器, 開發工具支援, 開源碼, 免費
3
TypeScript 語法
       All services from your imperative.


       語法 v.s. 關鍵字
            所有 ES3 語法
            module
            class , extends
            constructor
            export
            public, private
            interface
            implements
            ? (nullable)


4
All services from your imperative.




    現有專案如何循序漸進的改用 TypeScript 開發 JavaScript 應用程式

    TYPESCRIPT 開發實戰



5
STEP 0. 變更副檔名
      All services from your imperative.


      作業方式
        將 *.js 直接改成 *.ts
        修正建置動作: TypeScriptCompile
        儲存全部 (Save All) 或 方案重開
      注意事項
        Visual Studio 2012 的專案裡,至少要有先有
         一個 TypeScript 檔案,才能在手動修正副檔
         名時選擇 “TypeScriptCompile” 這個建置動作
         (Build Action)

6
STEP 0. 變更副檔名
       All services from your imperative.


      *.ts
         標準 TypeScript 副檔名


      *.d.ts
         d is stand for declaration
         此為 TypeScript 宣告檔專用的副檔名
         用來預先宣告 TypeScript 開發環境中可能會
          用到的變數、函數與物件,物件的部分皆以
          interface 的方式宣告

7
STEP 1. 型別註釋 (Type Annotations)
       All services from your imperative.


       通用型別
         所有型別都是 any 的子型別
         基本上 any 就是 JavaScript 可用的任意型別


       基本型別                            物件型別
            number                            interface
            bool                              module
            string                            class
            null                              支援 literal 型別
            undefined                         支援陣列型別


8
STEP 1. 型別註釋 (Type Annotations)
       All services from your imperative.


       標示型別
         變數宣告 (全域變數、類別變數、區域變數)
              使用 : T 表示法
              function 參數支援 optional types 運算子: ?
         函式回傳值
              支援型別推導
         函式傳入參數




9
陣列型別的用法
      All services from your imperative.




10
STEP 2. 加入宣告參考
       All services from your imperative.


       加入方式
         內建宣告參考: lib.d.ts
         加入參考
             /// <reference path="jquery.d.ts"/>

       參考資源
         TypeScript Source Code
             http://typescript.codeplex.com/SourceControl/BrowseLatest
         DefinitelyTyped
             https://github.com/borisyankov/DefinitelyTyped#readme
         RaphaelTS
             https://bitbucket.org/keesey/raphaelts
              Raphaël—JavaScript Library
                 http://raphaeljs.com/

11
STEP 3. 重構 JS 程式碼
        All services from your imperative.


       使用 class 定義類別

       使用 interface 定義介面

       使用 module 定義模組 (命名空間)

       善用 TypeScript 工具支援




12
使用 class 定義類別
       All services from your imperative.


       可存取性限制
         使用 public 與 private 關鍵字區分(僅限工具使用)
         沒有 protected
       繼承特性
         僅支援單一繼承
         衍生類別可以透過 super 呼叫父類別方法
       其他
         Parameter property declarations via
          constructor.

13
TS 型別檢查 / JS 型別檢查
       All services from your imperative.


       注意事項
         類別中的私有變數,只會在TS編譯器中檢查
         不過就算編譯器會報錯,JS 還是會順利產生!
         如下範例:
         class Test
         {
           private member: any = "private member";
         }

         alert(new Test().member);




14
使用 interface 定義介面
        All services from your imperative.


       特性
          僅定義給工具使用,不會產生任何程式碼
          屬「結構型別系統」
               在 TypeScript 中,所有物件會依據 prototype 自動
                產生介面,因此「匿名型別」不用強制轉型,就
                能自動變成特定介面型別。
               示範: structual_types.ts
          支援多載函式,依據不同參數簽名(signature)
          可定義於多個檔案,並可載入其他檔案
          可實作多重介面

15
使用 module 定義模組 (命名空間)
       All services from your imperative.


       特性
         類似 .NET 的命名空間
         可有效避免變數名稱衝突
         可有效定義模組裡類別的可見性
              internal modules  預設
              external modules  套上 export 關鍵字




16
善用 TypeScript 工具支援
        All services from your imperative.


       Visual Studio 2012
             自動型別檢查 (Static type checking)
             隱含強型別推演 (Strong type inference)
             移至定義 (Go To Definition) ( F12 )
             巡覽至 (Navigate To) ( Ctrl + , )
             語法自動完成 / Intellisense ( Ctrl + j )
             程式碼重構 (Code refactoring) ( F2 )
             下載: TypeScript for Visual Studio 2012 ( v0.8.1.1 )
       Monaco (線上版編輯器)
          http://www.typescriptlang.org/Playground/


17
TypeScript 的工具支援
        All services from your imperative.


       TypeScript support for Sublime Text
          http://www.interoperabilitybridges.com/media/15545
           2/typescript_support_for_sublime_text.zip
       TypeScript support for Emacs
          http://www.interoperabilitybridges.com/media/15544
           9/typescript_support_for_emacs.zip
       TypeScript support for Vim
          http://www.interoperabilitybridges.com/media/15544
           6/typescript_support_for_vim.zip



18
STEP 4. 偵錯方式
       All services from your imperative.


       設計時期 (Design Time)
         開發工具
              即時型別檢查
              即時 JavaScript 程式碼預覽 (Web Essentials 2012)
         編譯器型別檢查
              預設會將專案中所有 TypeScript 載入合併編譯
              預先查出重複的型別定義(變數、類別、函式、…)
       執行時期 (Run Time)
         使用 Source Map 進行偵錯 ( Google Chrome )
              中斷點
              單步偵錯
              監看式

19
Source Map 支援
         All services from your imperative.


       問題
           TypeScript-to-JavaScript → Debug JavaScript ??
       解決方案
           Source Map !!
           自動對應目前的 JS 程式碼到 TS 程式碼
           支援中斷點與逐步偵錯

       Introduction to JavaScript Source Maps - HTML5 Rocks
       http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/


20
使用 TypeScript 的理由?
         All services from your imperative.

       支援 ECMAScript 6 語法,執行在 ECMAScript 3 的瀏覽器上 (IE6+)
          ES 6 的 module, class
          ES 3 的相容性: http://www.webdevout.net/browser-support-ecmascript


       開源碼,採用 Apache 2.0 授權,可從 CodePlex 下載
        http://typescript.codeplex.com/

       工具支援 (Visual Studio 2012, Vi, Emac, Sublime Text)
          支援 Intellisense、型別檢查、型別推導、程式碼重構、巡覽至、符號搜尋


       與現有專案無縫整合
          8 → ∞


       名家之著
          Anders Hejlsburg - C# 之父

21
不用 TypeScript 的理由?
        All services from your imperative.

       目前還在 Preview 階段
         TypeScript 0.8.1.1


       還不斷發現 Bugs、工具支援也還在陸續開發(不過前景可期)

       有限的支援與函式庫(需要時間解決)

       目前版本尚未支援泛型(但 TypeScript 規格中已經有定義)

       所有型別都是 nullable 型別

       僅 Visual Studio 2012 與 Monaco web editor 支援較完整的工具特性



22
結論
       All services from your imperative.


       TypeScript 值得一試

       現在就能用在專案上,沒有相容性問題

       循序漸進的改善 JavaScript 程式碼品質

       工欲善其事,必先利其器!
          Visual Studio 2012 是你的好朋友 


23
參考連結
        All services from your imperative.


       TypeScript 官網
          http://www.typescriptlang.org/
       TypeScript 部落格
          http://blogs.msdn.com/b/typescript/
       TypeScript 原始碼下載
          http://typescript.codeplex.com/SourceControl/BrowseLatest
       TypeScript Language Specification
          http://go.microsoft.com/fwlink/?LinkId=267121
       多奇技術分享會 - 微軟最新程式語言:TypeScript 介紹
          http://www.youtube.com/watch?v=BicYCnjBYvc
       【TypeScript 開發實戰】LIVE DEMO 原始碼
          https://github.com/doggy8088/typescript-webconf2013

24
聯絡資訊
        All services from your imperative.


       The Will Will Web
         記載著 Will 在網路世界的學習心得與技術分享

          http://blog.miniasp.com/

       Will 保哥的技術交流中心 (臉書粉絲專頁)
          http://www.facebook.com/will.fans

       ★ ★ ★ Will 保哥的噗浪 ★ ★ ★
          http://www.plurk.com/willh/invite


25
All services from your imperative.




                      Q & A

26
All services from your imperative.




                      感謝各位



27

More Related Content

What's hot

これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたってTsuyoshi Matsudate
 
ендоскопічна діагностика патології шлунково кишкового тракту кінцевий
ендоскопічна діагностика патології шлунково кишкового тракту кінцевийендоскопічна діагностика патології шлунково кишкового тракту кінцевий
ендоскопічна діагностика патології шлунково кишкового тракту кінцевийБлагомед Луцк
 
2011年度 新3年生向け
2011年度 新3年生向け2011年度 新3年生向け
2011年度 新3年生向けYuki Takahashi
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅NAVER D2
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームKouhei Sutou
 
Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門VirtualTech Japan Inc.
 
Hyper v ネットワークの基本
Hyper v ネットワークの基本Hyper v ネットワークの基本
Hyper v ネットワークの基本Syuichi Murashima
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Taro Hirose
 
十二項架構設計原則
十二項架構設計原則十二項架構設計原則
十二項架構設計原則Philip Zheng
 
保哥線上講堂:LINQ 快速上手
保哥線上講堂:LINQ 快速上手保哥線上講堂:LINQ 快速上手
保哥線上講堂:LINQ 快速上手Will Huang
 
6 клас 1 урок Тварина - живий організм.ppt
6 клас 1 урок Тварина - живий організм.ppt6 клас 1 урок Тварина - живий організм.ppt
6 клас 1 урок Тварина - живий організм.pptssuser798f45
 
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-Takuya Akiba
 
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計増田 亨
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
Етапи розв'язування задач за допомогою комп'ютера
Етапи розв'язування задач за допомогою комп'ютераЕтапи розв'язування задач за допомогою комп'ютера
Етапи розв'язування задач за допомогою комп'ютераSoltys Ola
 
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説Masatoshi Tada
 

What's hot (20)

これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
 
ендоскопічна діагностика патології шлунково кишкового тракту кінцевий
ендоскопічна діагностика патології шлунково кишкового тракту кінцевийендоскопічна діагностика патології шлунково кишкового тракту кінцевий
ендоскопічна діагностика патології шлунково кишкового тракту кінцевий
 
2011年度 新3年生向け
2011年度 新3年生向け2011年度 新3年生向け
2011年度 新3年生向け
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
 
系統程式 -- 第 0 章
系統程式 -- 第 0 章系統程式 -- 第 0 章
系統程式 -- 第 0 章
 
трансгенні організми
трансгенні організмитрансгенні організми
трансгенні організми
 
Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門
 
Hyper v ネットワークの基本
Hyper v ネットワークの基本Hyper v ネットワークの基本
Hyper v ネットワークの基本
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)
 
十二項架構設計原則
十二項架構設計原則十二項架構設計原則
十二項架構設計原則
 
保哥線上講堂:LINQ 快速上手
保哥線上講堂:LINQ 快速上手保哥線上講堂:LINQ 快速上手
保哥線上講堂:LINQ 快速上手
 
Stack pivot
Stack pivotStack pivot
Stack pivot
 
6 клас 1 урок Тварина - живий організм.ppt
6 клас 1 урок Тварина - живий організм.ppt6 клас 1 урок Тварина - живий організм.ppt
6 клас 1 урок Тварина - живий організм.ppt
 
Jenkins Automation
Jenkins AutomationJenkins Automation
Jenkins Automation
 
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
 
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
Етапи розв'язування задач за допомогою комп'ютера
Етапи розв'язування задач за допомогою комп'ютераЕтапи розв'язування задач за допомогою комп'ютера
Етапи розв'язування задач за допомогою комп'ютера
 
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
 

Viewers also liked

JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)Will Huang
 
Java API for WebSocket 實作介紹
Java API for WebSocket 實作介紹Java API for WebSocket 實作介紹
Java API for WebSocket 實作介紹My own sweet home!
 
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例Will Huang
 
淺談Html5及建立完整 web socket 應用觀念
淺談Html5及建立完整 web socket 應用觀念淺談Html5及建立完整 web socket 應用觀念
淺談Html5及建立完整 web socket 應用觀念志賢 黃
 
Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)Will Huang
 
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)Will Huang
 
20130113 Web Conference - communicate
20130113 Web Conference - communicate20130113 Web Conference - communicate
20130113 Web Conference - communicateHitomi Yang
 
Secret sauce of building php applications
Secret sauce of building php applicationsSecret sauce of building php applications
Secret sauce of building php applicationsLin Yo-An
 
Does firefox matter?
Does firefox matter?Does firefox matter?
Does firefox matter?Irvin Chen
 
2013 01 13 webconf milkmidi Flash
2013 01 13 webconf milkmidi Flash2013 01 13 webconf milkmidi Flash
2013 01 13 webconf milkmidi Flash綠茶 奶
 
JavaScript for backend
JavaScript for backendJavaScript for backend
JavaScript for backendCaesar Chi
 
中文網路字型的現況與挑戰(Webconf 20130113)
中文網路字型的現況與挑戰(Webconf 20130113)中文網路字型的現況與挑戰(Webconf 20130113)
中文網路字型的現況與挑戰(Webconf 20130113)michael 葉
 
Gamification vs UX
Gamification vs UXGamification vs UX
Gamification vs UXHana Chang
 
130113 why.&.how.smb.running.ux-light
130113 why.&.how.smb.running.ux-light130113 why.&.how.smb.running.ux-light
130113 why.&.how.smb.running.ux-lightDavid Liu
 
WebConf 2013「Best Practices - The Upload」
WebConf 2013「Best Practices - The Upload」WebConf 2013「Best Practices - The Upload」
WebConf 2013「Best Practices - The Upload」Orange Tsai
 
Designing physical and digital experience in social web
Designing physical and digital experience in social webDesigning physical and digital experience in social web
Designing physical and digital experience in social webJanet Huang
 
Typescript in 30mins
Typescript in 30mins Typescript in 30mins
Typescript in 30mins Udaya Kumar
 

Viewers also liked (20)

JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
 
Java API for WebSocket 實作介紹
Java API for WebSocket 實作介紹Java API for WebSocket 實作介紹
Java API for WebSocket 實作介紹
 
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
 
淺談Html5及建立完整 web socket 應用觀念
淺談Html5及建立完整 web socket 應用觀念淺談Html5及建立完整 web socket 應用觀念
淺談Html5及建立完整 web socket 應用觀念
 
Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)
 
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
 
AngularConf2015
AngularConf2015AngularConf2015
AngularConf2015
 
Using TypeScript with Angular
Using TypeScript with AngularUsing TypeScript with Angular
Using TypeScript with Angular
 
20130113 Web Conference - communicate
20130113 Web Conference - communicate20130113 Web Conference - communicate
20130113 Web Conference - communicate
 
Secret sauce of building php applications
Secret sauce of building php applicationsSecret sauce of building php applications
Secret sauce of building php applications
 
Does firefox matter?
Does firefox matter?Does firefox matter?
Does firefox matter?
 
2013 01 13 webconf milkmidi Flash
2013 01 13 webconf milkmidi Flash2013 01 13 webconf milkmidi Flash
2013 01 13 webconf milkmidi Flash
 
JavaScript for backend
JavaScript for backendJavaScript for backend
JavaScript for backend
 
中文網路字型的現況與挑戰(Webconf 20130113)
中文網路字型的現況與挑戰(Webconf 20130113)中文網路字型的現況與挑戰(Webconf 20130113)
中文網路字型的現況與挑戰(Webconf 20130113)
 
BDD in .NET
BDD in .NETBDD in .NET
BDD in .NET
 
Gamification vs UX
Gamification vs UXGamification vs UX
Gamification vs UX
 
130113 why.&.how.smb.running.ux-light
130113 why.&.how.smb.running.ux-light130113 why.&.how.smb.running.ux-light
130113 why.&.how.smb.running.ux-light
 
WebConf 2013「Best Practices - The Upload」
WebConf 2013「Best Practices - The Upload」WebConf 2013「Best Practices - The Upload」
WebConf 2013「Best Practices - The Upload」
 
Designing physical and digital experience in social web
Designing physical and digital experience in social webDesigning physical and digital experience in social web
Designing physical and digital experience in social web
 
Typescript in 30mins
Typescript in 30mins Typescript in 30mins
Typescript in 30mins
 

Similar to TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式

TypeScript-twmvc#16
TypeScript-twmvc#16TypeScript-twmvc#16
TypeScript-twmvc#16twMVC
 
Struts Mitac(1)
Struts Mitac(1)Struts Mitac(1)
Struts Mitac(1)wangjiaz
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Gelis Wu
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressAppzhoujg
 
twMVC#16 | TypeScript
twMVC#16 | TypeScripttwMVC#16 | TypeScript
twMVC#16 | TypeScripttwMVC
 
Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發Chui-Wen Chiu
 
Nodejs部门分享
Nodejs部门分享Nodejs部门分享
Nodejs部门分享zffl
 
Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發建興 王
 
ES5 introduction
ES5 introductionES5 introduction
ES5 introductionotakustay
 
Django敏捷开发 刘天斯
Django敏捷开发 刘天斯Django敏捷开发 刘天斯
Django敏捷开发 刘天斯liuts
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7javatwo2011
 
Windows 8 apps dev.整理及分享
Windows 8 apps dev.整理及分享Windows 8 apps dev.整理及分享
Windows 8 apps dev.整理及分享Liyao Chen
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试lydiafly
 
Ext Js开发指导
Ext Js开发指导Ext Js开发指导
Ext Js开发指导clong365
 
物件導向程式設計課程講義(98 ges hi版)
物件導向程式設計課程講義(98 ges hi版)物件導向程式設計課程講義(98 ges hi版)
物件導向程式設計課程講義(98 ges hi版)Hui-Shih Leng
 
Javascript代码注释及文档生成
Javascript代码注释及文档生成Javascript代码注释及文档生成
Javascript代码注释及文档生成fangdeng
 

Similar to TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式 (20)

Dev307
Dev307Dev307
Dev307
 
TypeScript-twmvc#16
TypeScript-twmvc#16TypeScript-twmvc#16
TypeScript-twmvc#16
 
Struts Mitac(1)
Struts Mitac(1)Struts Mitac(1)
Struts Mitac(1)
 
Inside VCL
Inside VCLInside VCL
Inside VCL
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp
 
twMVC#16 | TypeScript
twMVC#16 | TypeScripttwMVC#16 | TypeScript
twMVC#16 | TypeScript
 
Borland C++Builder 入門課程
Borland C++Builder 入門課程Borland C++Builder 入門課程
Borland C++Builder 入門課程
 
beidakejian
beidakejianbeidakejian
beidakejian
 
Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發
 
Nodejs部门分享
Nodejs部门分享Nodejs部门分享
Nodejs部门分享
 
Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發Windows Mobile 多媒體應用程式開發
Windows Mobile 多媒體應用程式開發
 
ES5 introduction
ES5 introductionES5 introduction
ES5 introduction
 
Django敏捷开发 刘天斯
Django敏捷开发 刘天斯Django敏捷开发 刘天斯
Django敏捷开发 刘天斯
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
 
Windows 8 apps dev.整理及分享
Windows 8 apps dev.整理及分享Windows 8 apps dev.整理及分享
Windows 8 apps dev.整理及分享
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试
 
Ext Js开发指导
Ext Js开发指导Ext Js开发指导
Ext Js开发指导
 
物件導向程式設計課程講義(98 ges hi版)
物件導向程式設計課程講義(98 ges hi版)物件導向程式設計課程講義(98 ges hi版)
物件導向程式設計課程講義(98 ges hi版)
 
Javascript代码注释及文档生成
Javascript代码注释及文档生成Javascript代码注释及文档生成
Javascript代码注释及文档生成
 

More from Will Huang

深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)Will Huang
 
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境Will Huang
 
ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索Will Huang
 
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)Will Huang
 
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)Will Huang
 
Micro-frontends with Angular 10 (Modern Web 2020)
Micro-frontends with Angular 10 (Modern Web 2020)Micro-frontends with Angular 10 (Modern Web 2020)
Micro-frontends with Angular 10 (Modern Web 2020)Will Huang
 
從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點Will Huang
 
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)Will Huang
 
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)Will Huang
 
Protractor: The Hacker way (NG-MY 2019)
Protractor: The Hacker way (NG-MY 2019)Protractor: The Hacker way (NG-MY 2019)
Protractor: The Hacker way (NG-MY 2019)Will Huang
 
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)Will Huang
 
Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)Will Huang
 
Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)Will Huang
 
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)Will Huang
 
AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)Will Huang
 
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)Will Huang
 
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)Will Huang
 
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)Will Huang
 
以敏捷架構打造美國軟體外包專案的經驗談
以敏捷架構打造美國軟體外包專案的經驗談以敏捷架構打造美國軟體外包專案的經驗談
以敏捷架構打造美國軟體外包專案的經驗談Will Huang
 
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018Will Huang
 

More from Will Huang (20)

深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
 
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
 
ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索
 
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
 
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
 
Micro-frontends with Angular 10 (Modern Web 2020)
Micro-frontends with Angular 10 (Modern Web 2020)Micro-frontends with Angular 10 (Modern Web 2020)
Micro-frontends with Angular 10 (Modern Web 2020)
 
從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點
 
极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)极速 Angular 开发:效能调校技巧 (ngChina 2019)
极速 Angular 开发:效能调校技巧 (ngChina 2019)
 
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
 
Protractor: The Hacker way (NG-MY 2019)
Protractor: The Hacker way (NG-MY 2019)Protractor: The Hacker way (NG-MY 2019)
Protractor: The Hacker way (NG-MY 2019)
 
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
 
Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 开发技巧 (2018 ngChina 开发者大会)
 
Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)
 
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
 
AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)AKS 與開發人員體驗 (Kubernetes 大講堂)
AKS 與開發人員體驗 (Kubernetes 大講堂)
 
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
 
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
 
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
 
以敏捷架構打造美國軟體外包專案的經驗談
以敏捷架構打造美國軟體外包專案的經驗談以敏捷架構打造美國軟體外包專案的經驗談
以敏捷架構打造美國軟體外包專案的經驗談
 
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
 

TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式

  • 1. TypeScript 開發實戰 開發即時互動的 HTML5 WebSocket 聊天室應用程式 多奇數位創意有限公司 技術總監 黃保翕 ( Will 保哥 ) 部落格:http://blog.miniasp.com/ 1
  • 2. All services from your imperative. JavaScript for tools TYPESCRIPT 簡介 2
  • 3. TYPESCRIPT 簡介 All services from your imperative.  TypeScript = "靜態型別" + "動態型別" 程式語言  用「靜態型別」語法來描述 JavaScript 的動態型別  TypeScript 語法涵蓋完整 JavaScript 語法  TypeScript = JavaScript + OOP語法  支援 class (類別)、interface (介面)、module (模組)  TypeScript 最終將編譯成 JavaScript (無靜態型別)  語法相容於 ECMAScript 3 (ES3)  Any browser. Any host. Any OS. (含Node.js)  TypeScript 是一個工具語言!(適用於開發時期)  TypeScript 適合用來開發 Web 應用程式  靜態型別, 編譯器, 開發工具支援, 開源碼, 免費 3
  • 4. TypeScript 語法 All services from your imperative.  語法 v.s. 關鍵字  所有 ES3 語法  module  class , extends  constructor  export  public, private  interface  implements  ? (nullable) 4
  • 5. All services from your imperative. 現有專案如何循序漸進的改用 TypeScript 開發 JavaScript 應用程式 TYPESCRIPT 開發實戰 5
  • 6. STEP 0. 變更副檔名 All services from your imperative.  作業方式  將 *.js 直接改成 *.ts  修正建置動作: TypeScriptCompile  儲存全部 (Save All) 或 方案重開  注意事項  Visual Studio 2012 的專案裡,至少要有先有 一個 TypeScript 檔案,才能在手動修正副檔 名時選擇 “TypeScriptCompile” 這個建置動作 (Build Action) 6
  • 7. STEP 0. 變更副檔名 All services from your imperative.  *.ts  標準 TypeScript 副檔名  *.d.ts  d is stand for declaration  此為 TypeScript 宣告檔專用的副檔名  用來預先宣告 TypeScript 開發環境中可能會 用到的變數、函數與物件,物件的部分皆以 interface 的方式宣告 7
  • 8. STEP 1. 型別註釋 (Type Annotations) All services from your imperative.  通用型別  所有型別都是 any 的子型別  基本上 any 就是 JavaScript 可用的任意型別  基本型別  物件型別  number  interface  bool  module  string  class  null  支援 literal 型別  undefined  支援陣列型別 8
  • 9. STEP 1. 型別註釋 (Type Annotations) All services from your imperative.  標示型別  變數宣告 (全域變數、類別變數、區域變數)  使用 : T 表示法  function 參數支援 optional types 運算子: ?  函式回傳值  支援型別推導  函式傳入參數 9
  • 10. 陣列型別的用法 All services from your imperative. 10
  • 11. STEP 2. 加入宣告參考 All services from your imperative.  加入方式  內建宣告參考: lib.d.ts  加入參考 /// <reference path="jquery.d.ts"/>  參考資源  TypeScript Source Code http://typescript.codeplex.com/SourceControl/BrowseLatest  DefinitelyTyped https://github.com/borisyankov/DefinitelyTyped#readme  RaphaelTS https://bitbucket.org/keesey/raphaelts  Raphaël—JavaScript Library http://raphaeljs.com/ 11
  • 12. STEP 3. 重構 JS 程式碼 All services from your imperative.  使用 class 定義類別  使用 interface 定義介面  使用 module 定義模組 (命名空間)  善用 TypeScript 工具支援 12
  • 13. 使用 class 定義類別 All services from your imperative.  可存取性限制  使用 public 與 private 關鍵字區分(僅限工具使用)  沒有 protected  繼承特性  僅支援單一繼承  衍生類別可以透過 super 呼叫父類別方法  其他  Parameter property declarations via constructor. 13
  • 14. TS 型別檢查 / JS 型別檢查 All services from your imperative.  注意事項  類別中的私有變數,只會在TS編譯器中檢查  不過就算編譯器會報錯,JS 還是會順利產生!  如下範例: class Test { private member: any = "private member"; } alert(new Test().member); 14
  • 15. 使用 interface 定義介面 All services from your imperative.  特性  僅定義給工具使用,不會產生任何程式碼  屬「結構型別系統」  在 TypeScript 中,所有物件會依據 prototype 自動 產生介面,因此「匿名型別」不用強制轉型,就 能自動變成特定介面型別。  示範: structual_types.ts  支援多載函式,依據不同參數簽名(signature)  可定義於多個檔案,並可載入其他檔案  可實作多重介面 15
  • 16. 使用 module 定義模組 (命名空間) All services from your imperative.  特性  類似 .NET 的命名空間  可有效避免變數名稱衝突  可有效定義模組裡類別的可見性  internal modules  預設  external modules  套上 export 關鍵字 16
  • 17. 善用 TypeScript 工具支援 All services from your imperative.  Visual Studio 2012  自動型別檢查 (Static type checking)  隱含強型別推演 (Strong type inference)  移至定義 (Go To Definition) ( F12 )  巡覽至 (Navigate To) ( Ctrl + , )  語法自動完成 / Intellisense ( Ctrl + j )  程式碼重構 (Code refactoring) ( F2 )  下載: TypeScript for Visual Studio 2012 ( v0.8.1.1 )  Monaco (線上版編輯器)  http://www.typescriptlang.org/Playground/ 17
  • 18. TypeScript 的工具支援 All services from your imperative.  TypeScript support for Sublime Text  http://www.interoperabilitybridges.com/media/15545 2/typescript_support_for_sublime_text.zip  TypeScript support for Emacs  http://www.interoperabilitybridges.com/media/15544 9/typescript_support_for_emacs.zip  TypeScript support for Vim  http://www.interoperabilitybridges.com/media/15544 6/typescript_support_for_vim.zip 18
  • 19. STEP 4. 偵錯方式 All services from your imperative.  設計時期 (Design Time)  開發工具  即時型別檢查  即時 JavaScript 程式碼預覽 (Web Essentials 2012)  編譯器型別檢查  預設會將專案中所有 TypeScript 載入合併編譯  預先查出重複的型別定義(變數、類別、函式、…)  執行時期 (Run Time)  使用 Source Map 進行偵錯 ( Google Chrome )  中斷點  單步偵錯  監看式 19
  • 20. Source Map 支援 All services from your imperative.  問題  TypeScript-to-JavaScript → Debug JavaScript ??  解決方案  Source Map !!  自動對應目前的 JS 程式碼到 TS 程式碼  支援中斷點與逐步偵錯 Introduction to JavaScript Source Maps - HTML5 Rocks http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/ 20
  • 21. 使用 TypeScript 的理由? All services from your imperative.  支援 ECMAScript 6 語法,執行在 ECMAScript 3 的瀏覽器上 (IE6+) ES 6 的 module, class ES 3 的相容性: http://www.webdevout.net/browser-support-ecmascript  開源碼,採用 Apache 2.0 授權,可從 CodePlex 下載 http://typescript.codeplex.com/  工具支援 (Visual Studio 2012, Vi, Emac, Sublime Text) 支援 Intellisense、型別檢查、型別推導、程式碼重構、巡覽至、符號搜尋  與現有專案無縫整合 8 → ∞  名家之著 Anders Hejlsburg - C# 之父 21
  • 22. 不用 TypeScript 的理由? All services from your imperative.  目前還在 Preview 階段 TypeScript 0.8.1.1  還不斷發現 Bugs、工具支援也還在陸續開發(不過前景可期)  有限的支援與函式庫(需要時間解決)  目前版本尚未支援泛型(但 TypeScript 規格中已經有定義)  所有型別都是 nullable 型別  僅 Visual Studio 2012 與 Monaco web editor 支援較完整的工具特性 22
  • 23. 結論 All services from your imperative.  TypeScript 值得一試  現在就能用在專案上,沒有相容性問題  循序漸進的改善 JavaScript 程式碼品質  工欲善其事,必先利其器! Visual Studio 2012 是你的好朋友  23
  • 24. 參考連結 All services from your imperative.  TypeScript 官網  http://www.typescriptlang.org/  TypeScript 部落格  http://blogs.msdn.com/b/typescript/  TypeScript 原始碼下載  http://typescript.codeplex.com/SourceControl/BrowseLatest  TypeScript Language Specification  http://go.microsoft.com/fwlink/?LinkId=267121  多奇技術分享會 - 微軟最新程式語言:TypeScript 介紹  http://www.youtube.com/watch?v=BicYCnjBYvc  【TypeScript 開發實戰】LIVE DEMO 原始碼  https://github.com/doggy8088/typescript-webconf2013 24
  • 25. 聯絡資訊 All services from your imperative.  The Will Will Web 記載著 Will 在網路世界的學習心得與技術分享  http://blog.miniasp.com/  Will 保哥的技術交流中心 (臉書粉絲專頁)  http://www.facebook.com/will.fans  ★ ★ ★ Will 保哥的噗浪 ★ ★ ★  http://www.plurk.com/willh/invite 25
  • 26. All services from your imperative. Q & A 26
  • 27. All services from your imperative. 感謝各位 27