你們都喜歡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翻譯:公衆號《前端全棧開發者》