不用 TypeScript 的7 個理由

做者: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 插件來完成。


本文首發微信公衆號:前端先鋒

歡迎掃描二維碼關注公衆號,天天都給你推送新鮮的前端技術文章

歡迎掃描二維碼關注公衆號,天天都給你推送新鮮的前端技術文章

歡迎繼續閱讀本專欄其它高贊文章:


相關文章
相關標籤/搜索