Svelte:TypeScript 并“不值得”用來(lái)開(kāi)發(fā)庫(kù)

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




























