做者:Michael Krasnov翻譯:瘋狂的技術宅javascript
原文:https://medium.com/javascript...前端
未經容許嚴禁轉載java
不少人人都喜歡 TypeScript。它「解決」了 JS 的許多問題,它是 JS 的「超集」,它可以使你的代碼易於查錯且易於閱讀。有不少使用 TypeScript 的充分理由,可是我將給你 7 個不去用它的「很是好的」理由。程序員
若是 TypeScript 添加類型定義並在編譯時檢查它們,怎麼會有風險?況且 IDE 集成還會警告你有關類型不匹配的信息。正由於如此,TypeScript 將只會在編譯時檢查類型和僅可用的類型。任何網絡調用,系統庫,特定於平臺的 API 和無類型的第三方庫都沒法與 TypeScript 通訊。當你習慣檢查類型而且沒必要徹底瞭解代碼和平臺時,錯誤和 bug 就會顯現出來。面試
使用 JS,你無需對類型作任何假設,而且能夠檢查變量的具體值以確保它是你指望的值。或者,若是你在這種狀況下不關心其類型,則沒必要進行檢查。在 TS 中,你依靠編譯器爲你完成這個任務,可是它只能進行檢查。你能夠將這兩種方式結合起來,那又有什麼意義呢?若是要花時間編寫定義,而後花時間編寫代碼以確保在運行時維護這些定義,那麼爲何要用它們呢?typescript
另外一個悖論:本應該爲代碼庫帶來清晰度和可讀性的語言反而使它模糊。爲了說明個人意思,請查看一些我在流行的開源庫中找到的示例:segmentfault
// TODO: do this more elegantly ;((currentReducer as unknown) as Reducer< NewState, NewActions >) = nextReducer
這是來自 Redux 庫的代碼,全部這 4 行代碼都是把 nextReducer
分配給 currentReducer
。安全
// HACK: Since TypeScript inherits static properties too, we have to // fight against TypeScript here so Subject can have a different static create signature /** * Creates a new cold Observable by calling the Observable constructor * @static true * @owner Observable * @method create * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor * @return {Observable} a new cold observable * @nocollapse * @deprecated use new Observable() instead */ static create: Function = <T>(subscribe?: (subscriber: Subscriber<T>) => TeardownLogic) => { return new Observable<T>(subscribe); }
第二個例子來自 RxJS 庫。我不知道你是怎麼想的,可是若是我必須和一種本該爲我提供幫助的工具「戰鬥」,那麼我認爲這不是一個好工具。服務器
聽說 TypeScript 能夠解決 JavaScript 中存在的問題。但事實上並不是如此。動態類型歷來都不是 JavaScript 的問題,可是許多其餘陷阱,例如 NaN === NaN
爲假,分號爲可選或不可選,將對象定義更改成做用域的換行符,代替 OOP 的語法糖確實是問題。 TypeScript 並無解決這些問題,而是引入了另外一個標準,進一步分化了 JS 社區。微信
即便咱們假設 JS 中缺乏類型是一個問題,TS 也沒法解決它。你知道嗎,Java、C、C## 和其餘編譯型語言能夠安全地在編譯時和運行時保證強類型。解釋型語言沒法作到這一點。
TypeScript 是能夠編譯爲 JavaScript 的東西,根據定義它不能是超集。它限制了你能夠用 JavaScript 進行的操做,並掩蓋了它的強項,同時提供了安全的假象。若是你真的想成爲一名優秀的開發人員,請不要爲安慰本身而撒謊,而是要去嘗試瞭解 JavaScript 的真正功能及其靈活性。
使用 TypeScript 的許多緣由都表示它是開源的。是的,TS 編譯器是在 MIT 許可下分發的。可是它仍然由微軟(一家壟斷性公司)所控制,其開源進步不過是營銷方面的舉動。不要把開放源代碼與自由相混淆:Microsoft 仍然能夠任意對 TS 作任何事情,並且你就在這裏看着。另外一方面,JS 受國際委員會的管理,未經社區批准不會對任何內容進行更改。
我不敢相信竟然有人認爲這是使用它的一個緣由。大公司還使用舊版的代碼庫,進行稅務欺詐和歧視婦女呢。爲何忽然之間使用 TypeScript 就是一個很好的例子?
再也不是這樣了。的確當 TS 於 2012 年首次推出時,它具備諸如類這樣的功能,但在 JS 中尚不可用。可是從那時起,JS 已經走了很長一段路,如今 TS 正努力遇上。若是 JS 中缺乏什麼功能,能夠用 babel 插件來完成。