Svelte:TypeScript 並「不值得」用來開發庫
TypeScript 的使用率在不斷上升,Svelte 的開發者 Rich Harris 解釋了為什麼反其道而行,從 TypeScript 切換到 JavaScript 和 JSDoc。
Svelte 的一個將 TypeScript 轉為 JSDoc 的拉取請求引起了一些困惑的評論。評論中有人說:「這個改變是出於什麼原因呢?我在到處尋找這個問題或相關討論,但我沒有找到。」 隨後,這個問題在 GitHub 上因「討論過於激烈」而被鎖定回復。
在上個月的一次 Svelte Society 採訪中,Harris 提供了進一步的背景信息,他說:「我們決定要做的一件事就是在 Svelte 核心代碼庫中脫離 TypeScript,轉向使用 JavaScript。這裡有一些細微的複雜性我未曾充分解釋。」
他持有的觀點是:「類型是非常好的,但是 TypeScript 確實有些困擾…… 當你開始使用 .ts 文件後,你就必須有相應的工具來支持…… 當你使用像 TypeScript 這樣的非標準語言時,你會遇到很多阻礙,我已經開始認識到這並不值得。因此,我們將我們所有的類型都放入了 JSDoc 註解中,我們也能獲得所有的類型安全性,但沒有任何的缺點,因為它就是 JavaScript,所有的東西都在註解中,你可以直接運行代碼。這就是我們在 Sveltekit 代碼庫中所做的,它在 Svelte 4.0 中表現得非常好,所以我們決定對 Svelte 同樣採取這種方式,因為這將讓我們能夠更快速地前進。」
雖然 Svelte/SvelteKit 並非最受歡迎的 JavaScript 框架,但它卻是廣受好評的框架之一。
開發者傾向於使用 TypeScript,主要因為他們發現強類型降低了錯誤的發生率,並提升了編碼過程中的體驗,如代碼自動補全和即時幫助等功能。然而,令人驚訝的是,主要做為 API 文檔工具的 JSDoc,也可以進行類型檢查。這項功能已直接內置在 Visual Studio Code 中,如 這篇文檔 所述。開發者只需在 JavaScript 文件頂部加上:
// @ts-check
正如文檔中的解釋,「當無法推斷出類型時,可以利用 JSDoc 註解進行明確說明」。這個特性實際上是由 TypeScript 提供支持,這意味著在實際環境下,TypeScript 和 JSDoc 是相輔相成的。
不過,一個易被忽視的細節是,Harris 主要是在針對庫開發的上下文里關注 TypeScript。他認為切換到 JSDoc 在開發應用時,「可能收益不大」,他說道:「如果你在開發一個應用,無論怎樣你都不可避免地需要一個構建步驟。你需要優化代碼,需要代碼壓縮,需要打包各種資源。而如果你在構建一個庫,我將極力推薦你使用 JSDoc。」
Harris 在 Hacker News 進一步 補充,「Svelte 的用戶無需擔心,這個變動不會影響到你與 Svelte 使用 TypeScript 的能力——從 Svelte 導出的函數仍然會有所有熟悉的 TypeScript 好處,如類型檢查,智能感知,內聯文檔等」。他堅定地表示:「我們對 TypeScript 的承諾比以往任何時候都更為堅決。」
(題圖:DA/e20ff1ee-6388-42ce-8d82-66bc6eebf63c)
作者:Tim Anderson 譯者:ChatGPT 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive