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

JSでファミコンエミュレータを作った時の話
JSでファミコンエミュレータを作った時の話JSでファミコンエミュレータを作った時の話
JSでファミコンエミュレータを作った時の話sairoutine
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方do_aki
 
JWTを使った簡易SSOで徐々にシステムをリニューアルしている話
JWTを使った簡易SSOで徐々にシステムをリニューアルしている話JWTを使った簡易SSOで徐々にシステムをリニューアルしている話
JWTを使った簡易SSOで徐々にシステムをリニューアルしている話Kazuyoshi Tsuchiya
 
Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Sho Shimizu
 
インフラエンジニアのためのRancherを使ったDocker運用入門
インフラエンジニアのためのRancherを使ったDocker運用入門インフラエンジニアのためのRancherを使ったDocker運用入門
インフラエンジニアのためのRancherを使ったDocker運用入門Masahito Zembutsu
 
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかお前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかKousuke Ebihara
 
twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧twMVC
 
realpathキャッシュと OPcacheの面倒すぎる関係
realpathキャッシュと OPcacheの面倒すぎる関係realpathキャッシュと OPcacheの面倒すぎる関係
realpathキャッシュと OPcacheの面倒すぎる関係Yoshio Hanawa
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCdisc99_
 
ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説ota42y
 
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきことこれからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと土岐 孝平
 
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るZend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るYoshio Hanawa
 
RESTful API (JAX-RS) 書くだけで仕様書も 自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open APIRESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も 自動で作られていく話 with MicroProfile Open APIKohei Saito
 
Phpをいじり倒す10の方法
Phpをいじり倒す10の方法Phpをいじり倒す10の方法
Phpをいじり倒す10の方法Moriyoshi Koizumi
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjugYahoo!デベロッパーネットワーク
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説do_aki
 
CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討Masahito Zembutsu
 

What's hot (20)

JSでファミコンエミュレータを作った時の話
JSでファミコンエミュレータを作った時の話JSでファミコンエミュレータを作った時の話
JSでファミコンエミュレータを作った時の話
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方
 
JWTを使った簡易SSOで徐々にシステムをリニューアルしている話
JWTを使った簡易SSOで徐々にシステムをリニューアルしている話JWTを使った簡易SSOで徐々にシステムをリニューアルしている話
JWTを使った簡易SSOで徐々にシステムをリニューアルしている話
 
Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像
 
HTTP/2 入門
HTTP/2 入門HTTP/2 入門
HTTP/2 入門
 
インフラエンジニアのためのRancherを使ったDocker運用入門
インフラエンジニアのためのRancherを使ったDocker運用入門インフラエンジニアのためのRancherを使ったDocker運用入門
インフラエンジニアのためのRancherを使ったDocker運用入門
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかお前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのか
 
twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧
 
realpathキャッシュと OPcacheの面倒すぎる関係
realpathキャッシュと OPcacheの面倒すぎる関係realpathキャッシュと OPcacheの面倒すぎる関係
realpathキャッシュと OPcacheの面倒すぎる関係
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
 
ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説
 
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきことこれからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
 
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るZend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
 
LLVM最適化のこつ
LLVM最適化のこつLLVM最適化のこつ
LLVM最適化のこつ
 
RESTful API (JAX-RS) 書くだけで仕様書も 自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open APIRESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も 自動で作られていく話 with MicroProfile Open API
 
Phpをいじり倒す10の方法
Phpをいじり倒す10の方法Phpをいじり倒す10の方法
Phpをいじり倒す10の方法
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
 
CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討
 

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
 
你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧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
 
從實戰經驗看到的 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 全新功能探索
 
你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧你一定不能不知道的 Markdown 寫作技巧
你一定不能不知道的 Markdown 寫作技巧
 
使用 .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)
 
從實戰經驗看到的 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