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