新聞中心
TypeScript很受大眾喜愛。因?yàn)樗敖鉀Q”了JS的許多問題,是JS的“超集”。它不僅能輕松找出代碼錯(cuò)誤,還能使其易于閱讀。

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


咨詢
建站咨詢
