🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付

標題:“讓我們面對現實:是時候在 TypeScript 中拋棄any而使用unknown

已發布:真實

描述:“我們都曾嘗試過any快速解決方案,但代價高昂。探索為什麼unknown是更安全、更明智的選擇,可以讓你免於未來的麻煩。”

標籤:

  • 打字稿

  • JavaScript

  • 程式碼審查


我們都曾在拉取請求中見過這種情況。開發人員遇到了棘手的資料類型問題,為了讓事情正常運轉,他們使用了最簡單的工具: any 。它完成了工作,並讓編譯器沉默,但卻帶來了隱性成本。

我們的團隊設置了一個 Husky 預先提交鉤子來標記any ,這是一個很好的開始。但我們都知道,在緊急情況下, --no-verify標誌很容易被忽略。這使得程式碼審查成為我們最重要的防線。當你發現any漏網時,正是提倡使用更安全、更聰明的替代方案的絕佳機會: unknown


any的危險:對編譯器的「相信我」承諾🙈

坦白說:使用any就像告訴 TypeScript 編譯器別管它。當你將變數類型設為any ,實際上是在說:“停用所有類型檢查。我知道自己在做什麼。”

這意味著您可以使用該變數做任何事情,並且 TypeScript 不會阻止您,直到它在執行時爆炸。

這是一個典型的例子:

let myData: any;

myData = "This is a string";

// TypeScript has no problem with this line...
// but it will crash your app!
console.log(myData.toFixed(2)); 
// 😱 Uncaught TypeError: myData.toFixed is not a function

// The compiler is also perfectly happy with these obvious errors:
myData.someMethodThatDoesNotExist();
const result = myData * 10;

你使用的每一個any對我們賴以生存的 TypeScript 的型別安全造成漏洞。它會把潛在的編譯時捕獲變成令人沮喪的執行時錯誤,並使重構變成一場危險的猜謎遊戲。


救世主: unknown救援! 🦸

這時unknown就派上用場了。就像any一樣,你可以將任何值(字串、數字、物件)賦給類型為unknown變數。

那麼這有什麼大不了的?關鍵的差異在於, unknown不允許你對這個值做任何操作,除非你先證明它是什麼。你必須先處理不確定性,然後才能使用它。

unknown變數想像成一個上鎖的盒子。你知道裡面有東西,但你必須先檢查它是什麼,然後才能安全地使用它。

讓我們用unknown來修復前面的例子:

let myData: unknown;

myData = "This is a string";

// The compiler immediately stops you. This is a good thing!
// ❌ Error: Object is of type 'unknown'.
console.log(myData.toFixed(2));

// Here's how you work with it safely:
if (typeof myData === 'number') {
  // OK, inside this block, TypeScript now knows myData is a number.
  console.log(myData.toFixed(2));
} else if (typeof myData === 'string') {
  // And in here, it knows it's a string.
  console.log(myData.toUpperCase());
}

透過切換到unknown ,您可以編寫更具防禦性、更強壯的程式碼。它允許您使用typeofinstanceof等類型保護明確處理不同的情況,從而使應用程式更加穩定。


程式碼審查員的劇本

在程式碼審查過程中發現 any any是一個很好的學習時機。以下是如何建設性地處理它:

  1. 理解「為什麼」:開發人員可能只是想快速解決打字問題。無需批評。

  2. 解釋風險:簡要提及any繞過類型安全性並可以隱藏僅在執行時才會顯示的錯誤。

  3. 提供解決方案:建議將any替換為unknown 。然後,指導他們新增必要的類型檢查(例如, if語句區塊)以安全地存取變數。這不僅解決了眼前的風險,也使程式碼的意圖對每個人都更加清晰。


底線

雖然any是一種誘人的捷徑,但它破壞了我們使用 TypeScript 的初衷。 unknownunknown提供了相同的靈活性來接受任何類型的值,但不會犧牲類型安全性。

透過鼓勵在程式碼審查中使用unknown ,我們正在培養編寫更謹慎、更可預測、更健壯程式碼的習慣。它迫使我們直面不確定性,從而減少 bug,打造更健康的程式碼庫。所以,下次你想使用any時,請停下來,改用unknown 。未來的你——以及你的隊友——都會感謝你的。



原文出處:https://dev.to/trivedivatsal/lets-be-real-its-time-to-ditch-any-for-unknown-in-typescript-2cn4


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝11   💬7   ❤️3
467
🥈
我愛JS
📝3   💬9   ❤️10
185
🥉
AppleLily
📝1   💬4   ❤️1
64
#4
💬1  
5
#5
xxuan
💬1  
3
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付