不使用TypeScript的7個很好的理由

image

你們都喜歡TypeScript。它「解決」了JS的不少問題,它是JS的「超集」,它會讓你的代碼不容易出錯,並且閱讀起來很愉快。使用TypeScript有不少好的理由,但我要給你7個真正好的理由不要使用。javascript

有風險

譁,怎麼會有風險呢?若是TypeScript添加類型定義並在編譯時檢查它們,這怎麼可能有風險?以及IDE集成會警告你任何類型不匹配?正是由於如此。TypeScript僅在編譯時檢查類型,而且僅檢查可用的類型。任何網絡調用,系統庫,特定於平臺的API和無類型的第三方庫都沒法與TypeScript通訊。 當你習慣了對類型進行檢查,不用徹底理解代碼和平臺,錯誤和bug就會體現出來。前端

使用JS,你對類型不作任何假設,你檢查變量的具體值,以確保它是你所指望的。或者,若是你不關心它的類型,在這種特殊狀況下,你不關心。在TS中,你依靠編譯器爲你作,但它只能檢查這麼多。你能夠把這兩種方式結合起來,但那有什麼意義呢?若是你會花時間寫定義,而後花時間寫代碼來確保這些定義在運行時獲得維護,那爲何一開始就要有這些定義呢?java

太亂了

另外一個悖論是:語言本應該爲代碼庫帶來清晰和可讀性,但它卻使代碼庫變得模糊了。爲了說明個人意思,請查看一些我在流行的開源庫中找到的示例:typescript

// TODO: do this more elegantly
;((currentReducer as unknown) as Reducer<
  NewState,
  NewActions
>) = nextReducer

這是來自Redux庫的,全部這4行代碼都將 nextReducer 分配給 currentReducer安全

下一個例子若是來自RxJS庫。babel

// 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);
}

我不知道你是怎麼想的,但若是我不得不打一個本應幫助個人工具,我不認爲這是一個好工具。網絡

它不能解決問題

聽說TypeScript能夠解決JavaScript的問題,但事實並不是如此。動態類型化在JavaScript中歷來都不是問題,可是其餘不少毛病,好比 NaN === NaN 是false的,分號是可選的仍是不可選的,一個換行符把一個對象定義改爲了做用域,語法糖代替OOP,這些確實是問題。TypeScript並無解決這些問題,而是引入了另外一個標準,進一步分化了JS社區。工具

即便假設JS中缺乏類型是一個問題,TS也沒法解決。你知道是什麼嗎?Java、C、C#和其餘編譯語言。它們能夠在編譯時和運行時安全地保證強類型,解釋語言就是不能作到這一點。this

它不是超集,而是子集

TypeScript是編譯成JavaScript的東西,從定義上看,它不多是一個超集。它限制了你使用JavaScript所能作的事情,掩蓋了它強大的一面,同時提供了一種虛假的安心感。若是你真的想成爲一名優秀的開發者,就不要知足於安逸的謊話,要試着去了解JavaScript的真正威力和它的靈活性。spa

它是開源的,僅此而已

使用TypeScript的許多緣由都代表它是開源的。的確,TS編譯器是在MIT許可下分發的。但它仍然被微軟這個壟斷巨頭所控制,它在開源方面的進步只不過是一種營銷手段。不要把開源和民主混爲一談,微軟仍然能夠自由地對TS作任何事情,而JS則是由一個國際委員會管理,沒有通過社會的承認,是不會改變任何東西的。

可是大公司使用它…

我不敢相信有人認爲這是一個緣由。大公司還使用傳統的代碼庫,進行稅務欺詐,歧視婦女。爲何忽然間他們使用TypeScript就是一個好例子?

可是它具備更多功能……

如今不同了。的確,2012年TS剛推出的時候,它有類等功能,在JS中仍是沒有的。可是JS從那時起已經有了長足的進步,如今TS也在努力的追趕。若是JS有什麼缺失,有一個babel插件能夠作到。

感謝你的閱讀,但願你喜歡這篇文章!


原文:https://medium.com/javascript-in-plain-english做者:Michael Krasnov翻譯:公衆號《前端全棧開發者》

相關文章
相關標籤/搜索