7個不使用TypeScript的理由,你認同嗎?
TypeScript很受大眾喜愛。因為它“解決”了JS的許多問題,是JS的“超集”。它不僅能輕松找出代碼錯誤,還能使其易于閱讀。
對,沒錯,使用TypeScript的理由太多了。
反其道而行之,今天小芯就要說7個不使用TypeScript的理由。
1. 它不能解決問題
據(jù)說TypeScript可以解決JavaScript的問題,但事實并非如此。動態(tài)類型在JavaScript中從來都不是問題,但是許多其他問題,例如NaN===NaN為false、分號為可選或非可選、換行符將對象定義更改為作用域、語法糖代替OOP等,確實是問題。TypeScript并沒有解決這些問題,但是引入了另一個標準,進一步分化了JS社區(qū)。
即使假設(shè)JS中缺少類型是一個問題,TS也不能解決這個問題。你知道什么語言可以解決嗎?Java、C、C#等編譯語言可以。它們可以在編譯和運行時安全地保證強類型。翻譯語言就是不能做到這一點。
2. 雖然開源,但很局限
使用TypeScript的許多原因表明它是開源的。沒錯,TS編譯器是在MIT許可下發(fā)布的。但它仍由微軟(Microsoft)控制,微軟是一家壟斷性的大公司,其開源技術(shù)的進步不過是一種營銷手段。不要把開源和民主混為一談:微軟仍然可以用TS做任何你想做的事情,你只是來看看。另一方面,JS由一個國際委員會管理,未經(jīng)共同體批準,任何事情都不會改變。
來源:Pexels
3. 危險
所以,如果TypeScript添加類型定義并在編譯時進行檢查,會有什么風險呢?以及IDE集成將警告你任何類型不匹配?
正因為如此,TypeScript只在編譯時檢查類型,并且只檢查可用的類型。任何網(wǎng)絡(luò)調(diào)用、系統(tǒng)庫、特定于平臺的API和非類型化的第三方庫都無法與TypeScript通信。當你習慣于檢查類型,而不必完全理解代碼和平臺時,就會出現(xiàn)錯誤和bug。
使用JS,對類型沒有任何假設(shè),并且檢查變量的具體值,以確保它符合期望?;蛘撸绻悴魂P(guān)心它在這種特殊情況下的類型,就無需檢查。在TS中,你依賴編譯器執(zhí)行此操作,但它只能檢查這么多。你可以把這兩種方法結(jié)合起來,但那又有什么意義呢?如果花時間編寫定義,然后再編寫代碼以確保運行期間維護這些定義,那么為什么首先要選用它們呢?
4. 凌亂
另一個悖論是:本應(yīng)為代碼庫增加清晰性和可讀性的語言反而令其晦澀難懂。為了展示我的意思,請看以下在有效開源庫中找到的一些示例:
- // TODO: dothismoreelegantly
- ;((currentReducerasunknown) asReducer<
- NewState,
- NewActions
- >) =nextReducer
viewrawcreateStore.ts hostedwith❤by GitHub
這一行來自Redux庫,這4行所做的就是將nextReducer分配給currentReducer。
- // HACK: SinceTypeScriptinheritsstaticpropertiestoo, wehaveto
- // fightagainstTypeScriptheresoSubjectcanhaveadifferentstaticcreatesignature
- /**
- * CreatesanewcoldObservablebycallingtheObservableconstructor
- * @statictrue
- * @ownerObservable
- * @methodcreate
- * @param {Function} subscribe? thesubscriberfunctiontobepassedtotheObservableconstructor
- * @return {Observable} anewcoldobservable
- * @nocollapse
- * @deprecatedusenewObservable() instead
- */
- staticcreate: Function= <T>(subscribe?: (subscriber: Subscriber<T>) =>TeardownLogic) => {
- returnnewObservable<T>(subscribe);
- }
viewrawObservable.ts hostedwith❤by GitHub
下一個例子來自RxJS庫。我不知道你的情況,但如果我要和一個應(yīng)該幫助我的工具戰(zhàn)斗,我認為這不是一個好工具。
5. 不是超集,而是子集
TypeScript是編譯成JavaScript的語言,根據(jù)定義它不能是超集。它限制了使用JavaScript所能做的事情,并且在提供虛假的內(nèi)心平靜的同時掩蓋了JavaScript強大的一面。如果你真的想成為一個偉大的開發(fā)者,不要沉溺于一個安慰的謊言,試著去理解JavaScript的真正力量和它的靈活性。
6. 有更多的特點…
這個原因已經(jīng)不再成立。誠然,當TS在2012年首次引入時,它具有類等特性,但在JS中仍然不可用。但是JS從那時起已經(jīng)走了很長的路,現(xiàn)在TS正在努力跟上。如果JS中缺少任何東西,那么就需要一個babel插件來完成。
7. 大公司會選擇它…
我不敢相信有人會認為這是一個原因。大公司也使用遺留的代碼庫,進行稅務(wù)欺詐,歧視婦女。為什么他們突然使用TypeScript是一個很好的例子呢?
來源:Pexels
TypeScript的確有許多好用之處,但不是什么情況都適用,小芯也不是什么“杠精”,只是希望大家可以客觀看待~