小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

JavaScript 的生產(chǎn)力工具: TypeScript

 看見就非常 2015-04-23

TypeScript 目前已經(jīng)迭代到 1.4 版本, 即將到來的 1.5 又搭載了更多好用的特性, 包括與 Angular 團(tuán)隊(duì)合作增加的裝飾器 (Decorators).

很高興的是看到國內(nèi)不少一線前端對 TypeScript 還是抱以比較積極的態(tài)度, 但也有很多同學(xué)提出了一些質(zhì)疑和批評. 我寫這篇文章的目的就是希望能以自己的理解對常見的誤解做一個(gè)說明.

TypeScript 是前端工程師的工具

很多同學(xué)會認(rèn)為 TypeScript 是為了吸引 (或者只能吸引) 一些掌握了 C#/Java 的后端工程師. 但事實(shí)上, TypeScript 的初衷我想是為了適應(yīng)更大規(guī)模的 Web 應(yīng)用前端開發(fā) (當(dāng)然, 它也可以被用到 NodeJS 上).

經(jīng)常會看到有同學(xué)把 TypeScript 和 CoffeeScript 放在一起比較, 我認(rèn)為是不大恰當(dāng)?shù)? TypeScript 是 JavaScript + 類型系統(tǒng), 而 CoffeeScript 是 Python/Ruby 口味的 JavaScript. 進(jìn)入兩個(gè)項(xiàng)目的官網(wǎng), 很容易就可以從它們宣傳的重點(diǎn)上看出區(qū)別.

TypeScript 是為了解決 Scalable 的問題. 而對于 CoffeeScript, 我想很大程度上是因?yàn)樽髡哒J(rèn)為:

Underneath that awkward Java-esque patina, JavaScript has always had a gorgeous heart.

但老實(shí)說我挺喜歡 JavaScript 的語法風(fēng)格.

TypeScript 是 JavaScript 的工具

文章標(biāo)題其實(shí)很明確地表達(dá)了我對 TypeScript 的看法, 它 (確切地說是 TypeScript 的中的 Type) 是 JavaScript 的工具, 不應(yīng)該被作為一門新的語言來對待.

靈活 vs 健壯

有同學(xué)說, 就喜歡 JavaScript 弱類型的靈活, 認(rèn)為在 JavaScript 上加上類型會削弱這種靈活性. 我自己雖然不是 JavaScript 入門編程的, 但第一門精通的語言還是 JavaScript, 它也是我最喜歡的語言之一. 我也非常理解這樣的心情: 本來直接 return 一個(gè)對象字面量就可以, 現(xiàn)在非要我去定義一個(gè) interface, 這不是沒事找事么.

確實(shí), 對于一個(gè)規(guī)模不大的項(xiàng)目來說, 直接書寫我們熟悉的 JavaScript 也不容易出錯, 并且更加靈活. 但是, 如果我們將項(xiàng)目規(guī)模擴(kuò)大: 一方面由于 JavaScript 弱類型的性質(zhì), 一些 Lint 能夠檢測到一部分問題 (比如局部變量的命名和使用), 卻在更多的時(shí)候無能為力 (比如對象屬性); 團(tuán)隊(duì)之間的協(xié)作花費(fèi)大量時(shí)間查閱文檔; 如果需要重構(gòu)代碼, 重命名, 都費(fèi)時(shí)費(fèi)力, 還可能留下大量隱患. 這個(gè)時(shí)候再想想 C# 和 Java, 是不是會覺得爽歪歪了.

而且, 針對 JavaScript 的特點(diǎn), TypeScript 有一個(gè)類型 any, 并且在 1.4 中增加了聯(lián)合類型 (Union Types) 以及配套的類型收窄 (Type Guards), 一方面盡可能地保留 JavaScript 的靈活性, 另一方面也將靜態(tài)類型語言在工程上的優(yōu)勢保留下來.

比如:

function foo(strs: string|string[]) {
    if (typeof strs === 'string') {
        // it's a string
    } else {
        // it's an array
    }
}

總之, 靈活是好事, 但是也不必排斥 TypeScript 的類型系統(tǒng), 畢竟確實(shí)在規(guī)模較大的項(xiàng)目上, 它對于代碼健壯性的價(jià)值是顯而易見的.

編程風(fēng)格

也有同學(xué)說喜歡 JavaScript 的多范式編程風(fēng)格. 畢竟 JavaScript 也算大半個(gè)函數(shù)式編程語言, TypeScript 會不會削弱了 JavaScript 函數(shù)的地位呢? 當(dāng)然不會. F#/Haskell 也有類型系統(tǒng), 但它們都是不折不扣的函數(shù)式編程語言.

靜態(tài)類型與編程風(fēng)格并不沖突, 不僅如此, TypeScript 還能讓 ES3/5 提早用上 ES6 的箭頭函數(shù) (Arrow Function), 函數(shù)式編程更加暢快了.

未來

我想 Angular 2 宣布使用 TypeScript 對于其生態(tài)可謂是非常重要的一筆. 同時(shí)微軟谷歌兩家聯(lián)手, 也為 ES7 中類型的回歸 (ES4 的流產(chǎn)) 埋下了伏筆. JavaScript 之父 Brendan Eich 也在 Twitter 上表示:

Everyone wants types. I was clearly ahead of time with ES4.

現(xiàn)在開始寫 TypeScript 吧!

--

我在 GitHub 上創(chuàng)建了 TypeScript 中文指南, 希望能幫有興趣的同學(xué)快速入門. 目前還在編寫中, 如果大家有什么希望看到的內(nèi)容或者自己的想法歡迎創(chuàng)建 issue.

w3ctech微信

掃碼關(guān)注w3ctech微信公眾號

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多