為什么有些前端專家們開始放棄TypeScript?

TypeScript的勝利和意想不到的轉折

開發(fā)者能夠接受和掌握新工具的能力,即使一開始可能會遇到懷疑,也是他們專業(yè)能力的標志。TypeScript,JavaScript的超集,在近年來經(jīng)歷了顯著的崛起,得到了廣泛的采用,并成為現(xiàn)代Web開發(fā)的基本組成部分。
然而,最近的事件引起了開發(fā)者社區(qū)的關注,因為一些知名的開源項目,包括Svelte、Drizzle和Turbo,出人意料地決定放棄TypeScript,轉而選擇純粹的原生JavaScript。
這一轉變在開發(fā)者中引發(fā)了激烈的辯論,促使人們更加深入地審視這一離開背后的動機以及對JavaScript生態(tài)系統(tǒng)的潛在影響。
TypeScript的起源

要真正理解為什么一些開發(fā)者正在告別TypeScript,就必須追溯它從起初的謙遜開始到如今在Web開發(fā)領域的地位。2012年,微軟推出了TypeScript作為一種開源語言。最初,TypeScript并沒有引起開發(fā)社區(qū)的立即關注。這被視為一次有趣的實驗,而不是一次革命性的飛躍。
JavaScript的生態(tài)系統(tǒng)已經(jīng)充滿了動態(tài)和弱類型語言,許多開發(fā)者對現(xiàn)狀感到滿意。
然而,TypeScript的轉折點出現(xiàn)在Angular 2上,這是由谷歌開發(fā)的一種流行的Web應用框架,它大膽地決定將TypeScript作為其主要語言。
這個決定遭到了懷疑和抵抗,因為開發(fā)人員對于給JavaScript添加靜態(tài)類型的想法感到困惑。然而,事實證明這是TypeScript歷史上的一個關鍵時刻。Angular采用TypeScript作為催化劑,推動了TypeScript的發(fā)展。最初對其持懷疑態(tài)度的開發(fā)者開始看到靜態(tài)類型、增強工具和更好的代碼質量帶來的好處。TypeScript開始受到關注,并迅速滲透到開發(fā)領域。
TypeScript的勝利和意想不到的轉折
多年來,TypeScript取得了前所未有的成功。它的采用率不斷上升,成為開發(fā)大型Web應用程序的關鍵工具。
它的好處是不可否認的:
類型安全性:TypeScript引入了靜態(tài)類型,可以在編譯時捕獲類型相關的錯誤,而不是在運行時。這個特性顯著提高了代碼質量,減少了難以調試的問題的可能性。
工具支持:TypeScript提供了出色的工具支持,包括自動完成、重構和智能代碼導航等功能。這使得開發(fā)人員更加高效,并減少了調試時間。
可擴展性:在大型項目中,TypeScript的類型系統(tǒng)被證明對于維護代碼庫非常寶貴,使得理解、重構和擴展現(xiàn)有代碼變得更加容易。
社區(qū)和生態(tài)系統(tǒng):TypeScript擁有一個充滿活力和活躍的社區(qū),為與TypeScript兼容的庫、框架和工具的增長做出了貢獻。
然而,就在TypeScript似乎已經(jīng)確立了其不可或缺的地位時,開發(fā)社區(qū)卻目睹了一場意想不到的變故。
知名的開源項目,包括Svelte、Drizzle和Turbo,決定在他們的代碼庫中放棄使用TypeScript。澄清一下,這個決定并不意味著終端用戶被禁止在這些庫中使用TypeScript。相反,它意味著這些庫本身將不再使用TypeScript進行開發(fā)。
探索背后的動機
這些發(fā)展中出現(xiàn)的關鍵問題是:
在體驗了TypeScript的好處之后,開發(fā)人員怎么可能考慮回到原始的JavaScript呢?

“類型體操”案件
David Heinemeier Hansson,流行的Ruby on Rails框架的創(chuàng)造者,對一些項目為何告別TypeScript提供了深入的見解。
在Turbo版本8的情況下,主要原因并不是編譯步驟,而是TypeScript引入的被認為是“類型體操”。
Hansson解釋說,在他自己的庫"Svelte Fire"上工作時,他遇到了一些情況,不得不進行這些"類型體操",以滿足編譯器的要求。
術語“類型體操”指的是開發(fā)人員為滿足TypeScript的類型約束而執(zhí)行的有時需要翻跟斗和復雜操作的技巧。
雖然可以使用“any”類型來抑制類型錯誤,但這種方法不符合可維護和高質量代碼的標準。這可能會導致維護方面的挑戰(zhàn),并降低TypeScript帶來的好處。
這個觀點揭示了一些開發(fā)者在使用TypeScript時遇到的痛點之一。
盡管類型系統(tǒng)帶來了實質性的好處,但也引入了復雜性,有時需要開發(fā)人員在復雜的類型層次結構中進行導航以實現(xiàn)他們的目標。
Svelte的實用主義
轉向Svelte,他們與TypeScript分道揚鑣的原因更加務實。
Svelte的創(chuàng)始人Rich Harris強調了他們決策的實用性。即將發(fā)布的Svelte 5將不再依賴于TypeScript。
此外,Svelte Kit,一個用于構建Web應用程序的框架,已經(jīng)采用了純粹的原生JavaScript。
這一轉變的推動力是消除了編譯步驟。在像Svelte Kit這樣的大型框架中,這對提高生產(chǎn)力有著顯著的推動作用。
移除TypeScript意味著在編譯過程中減少了類型檢查的需求,從而加快了構建時間并為開發(fā)人員提供更快的反饋。這是出于優(yōu)化開發(fā)流程的務實決策。
然而,令Svelte的情況特別引人注目的是,他們通過使用JSDoc成功保留了大部分TypeScript的優(yōu)勢。
JSDoc是一種標準化的注釋格式,可以使用普通的JavaScript注釋來聲明類型和文檔。這些注釋可以用來生成.d.ts文件,并在代碼編輯器中提供智能感知,提供與TypeScript相同的好處。
這種方法使得Svelte在性能和類型安全之間取得了平衡。盡管他們放棄了TypeScript以提高編譯時間,但他們保留了使用JSDoc注釋為開發(fā)人員提供類型信息和文檔的能力。
TypeScript的未來和持續(xù)的辯論
那么,一些知名項目最近對TypeScript的轉變是否意味著它在JavaScript生態(tài)系統(tǒng)中的統(tǒng)治即將結束?答案并不簡單。談到使用Svelte Kit或Next.js等工具構建應用程序時,TypeScript仍然是開發(fā)過程中不可或缺的一部分。
TypeScript與這些工具的集成是無縫的,并且經(jīng)過優(yōu)化以提供最佳結果。試圖用JSDoc和純JavaScript復制這些結果可能是一項艱巨的任務。
然而,和解的曙光可能已經(jīng)出現(xiàn)在地平線上。一個名為“可選靜態(tài)類型”的ECMAScript第一階段提案目前正在考慮中。如果獲得批準,它將在JavaScript中本地引入可選類型注解,可能在某些情況下使TypeScript幾乎過時。
這個提案在開發(fā)者社區(qū)引發(fā)了激烈的辯論。有人認為將可選類型注解納入JavaScript本身可以實現(xiàn)更簡化和統(tǒng)一的生態(tài)系統(tǒng)。它可以簡化開發(fā)過程,減少轉譯的需求,并有可能消除TypeScript引入的一些復雜性。
另一方面,TypeScript的支持者認為,TypeScript提供了額外的功能和成熟的類型系統(tǒng),超越了ECMAScript提案的目標。他們認為,TypeScript豐富的工具和庫生態(tài)系統(tǒng)以及廣泛的社區(qū)支持,提供了一種難以僅僅通過原生JavaScript特性復制的健壯性水平。
結束
最近一些知名項目對TypeScript的轉變表明了Web開發(fā)領域中的一個微妙發(fā)展。這提醒我們,在不斷變化的技術環(huán)境中,適應和實用主義往往決定開發(fā)者的選擇。
TypeScript的發(fā)展歷程,從其謙遜的起步到廣泛的采用,一直伴隨著熱情和擔憂。雖然它無可否認地在類型安全和工具支持方面帶來了好處,但也面臨著挑戰(zhàn),正如那些選擇與之分道揚鑣的開發(fā)者所強調的那樣。
然而,在許多情況下,TypeScript的未來依然光明,特別是在靜態(tài)類型和強大工具的優(yōu)勢至關重要的情況下。它仍然是構建復雜的網(wǎng)絡應用程序的有價值工具,這些應用程序需要強大的類型保證和可維護性。
最終,使用TypeScript還是純JavaScript的決定,最終取決于項目的具體要求和開發(fā)團隊的偏好。TypeScript 在 Web 開發(fā)領域留下了深刻的印記,無論它是繼續(xù)成為生態(tài)系統(tǒng)的基石還是讓位于原生 JavaScript 特性,它無可否認地影響了開發(fā)者編寫和組織代碼的方式。
成為一名優(yōu)秀的開發(fā)者意味著在項目目標和原則與之一致時接受變化,同時也意味著保持對新可能性的開放,即使這意味著告別一款曾經(jīng)為我們服務良好的工具。在充滿活力的網(wǎng)頁開發(fā)世界中,適應性仍然是成功的關鍵。
由于文章內容篇幅有限,今天的內容就分享到這里,文章結尾,我想提醒您,文章的創(chuàng)作不易,如果您喜歡我的分享,請別忘了點贊和轉發(fā),讓更多有需要的人看到。同時,如果您想獲取更多前端技術的知識,歡迎關注我,您的支持將是我分享最大的動力。我會持續(xù)輸出更多內容,敬請期待。
