」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼需要類型保護?探索不同類型及其用例

為什麼需要類型保護?探索不同類型及其用例

發佈於2024-11-08
瀏覽:149

Why Are Type Guards Necessary? Exploring Different Types and Their Use Cases

為什麼需要型別保護?探索不同類型及其用例

在 TypeScript 中,類型保護在使程式碼庫更加可靠、對開發人員更友善方面發揮著重要作用。它們透過允許開發人員縮小類型來幫助確保類型安全,這有助於減少運行時錯誤並使程式碼更易於理解和維護。

什麼是型別保護?

類型保護是對類型執行運行時檢查的函數表達式,確保值在進一步處理之前滿足特定條件。它們有助於維護類型安全,使開發人員能夠適當地處理值。

為什麼需要型別保護?

在 JavaScript 中,您經常會遇到可能具有多種類型的值,例如傳回字串或數字的函數。如果沒有類型保護,TypeScript 將無法確定確切的類型,從而導致潛在的運行時錯誤和不正確的行為。類型防護可讓您在執行時間檢查值的類型,幫助 TypeScript 縮小類型範圍並提供更準確的類型檢查。

類型保護的常見類型及其用例

1。 typeof 類型保護

用例:基本類型的基本型別檢查。
例子

function printValue(value: string | number) {
  if (typeof value === "string") {
    console.log(`String value: ${value.toUpperCase()}`);
  } else {
    console.log(`Number value: ${value.toFixed(2)}`);
  }
}

說明:typeof 對原始型別(字串、數字、布林值)有效。它允許函數以不同的方式處理字串和數字類型。

2.自訂型別防護(是關鍵字)

使用案例:對於複雜的邏輯,檢查自訂形狀或介面。

例子

 interface Square {
    side: number;
  }
  interface Circle {
    radius: number;
  }

  function isSquare(shape: Square | Circle): shape is Square {
    return (shape as Square).side !== undefined;
  }

  function calculateArea(shape: Square | Circle) {
    if (isSquare(shape)) {
      return shape.side * shape.side;
    } else {
      return Math.PI * shape.radius * shape.radius;
    }
  }

說明:自訂類型防護可讓您定義檢查特定屬性以確定類型的函數。在這裡,isSquare 檢查 side 屬性是否存在。

3.在運算子類型保護

使用案例:檢查物件是否具有特定屬性。
例子

 interface Car {
    drive(): void;
  }
  interface Boat {
    sail(): void;
  }

  function move(vehicle: Car | Boat) {
    if ("drive" in vehicle) {
      vehicle.drive();
    } else {
      vehicle.sail();
    }
  }

說明:in 運算子檢查屬性是否存在,幫助 TypeScript 理解型別並允許存取相關方法。

結論

類型防護是 TypeScript 中的一項強大功能,可實現精確的類型檢查、減少錯誤並提高程式碼的可讀性和可維護性。透過利用 typeof、instanceof、自訂類型保護和 in 運算符,您可以在 TypeScript 專案中安全有效地處理複雜類型。

版本聲明 本文轉載於:https://dev.to/naymhdev/why-are-type-guards-necessary-exploring-different-types-and-their-use-cases-2f8e?1如有侵犯,請聯絡study_golang@163 .com刪除
最新教學 更多>
  • Darshan Hiranandani 的解釋:如何使用 PHP 連接到 MySQL 資料庫?
    Darshan Hiranandani 的解釋:如何使用 PHP 連接到 MySQL 資料庫?
    大家好,我是 Darshan Hiranandani,我正在解釋如何使用 PHP 連接到 MySQL 資料庫? 要使用 PHP 連線到 MySQL 資料庫,您可以使用 mysqli 擴充或 PDO(PHP 資料物件)擴充。以下是這兩種方法的範例: 使用 mysqli 擴充
    程式設計 發佈於2024-11-09
  • 如何掌握 CSS 盒子模型以實現完美的網站佈局(+ Codepen 範例)
    如何掌握 CSS 盒子模型以實現完美的網站佈局(+ Codepen 範例)
    嘿,了不起的人!欢迎回到我的博客。 ?今天,我们将深入研究 CSS 盒子模型,揭秘如何确定每个元素的大小,以及如何使用这些知识来创建精确、现代和简洁的设计(本文末尾的实际示例)。 盒子模型简介 CSS 盒子模型是网页设计的基础,它规定了每个 HTML 元素如何在网页中占据空间。 盒子...
    程式設計 發佈於2024-11-09
  • 如何在空手道的讀取方法中參數化請求檔名?
    如何在空手道的讀取方法中參數化請求檔名?
    在Karate的讀取方法中參數化請求檔名嘗試使用Karate進行自動化API測試時,您可能會在嘗試透過時遇到問題將XML 檔案傳送到Read 方法,收到類似問題中提到的異常。當您在 Read 方法中使用變數表示檔案路徑(例如 read(varXmlFile))時,會發生這種情況。 要解決此問題,請確...
    程式設計 發佈於2024-11-09
  • 如何在 Pandas 中基於 If-Else-Else 條件建立列?
    如何在 Pandas 中基於 If-Else-Else 條件建立列?
    在 Pandas 中使用 If-Else-Else 條件建立列根據 if-elif-else條件建立新列,主要有兩種方法:非向量化方法此方法涉及定義一個對行進行操作的函數:def f(row): if row['A'] == row['B']: val = 0 eli...
    程式設計 發佈於2024-11-09
  • 建立更聰明的合約:Go 如何為 KALP Studio 的區塊鏈解決方案提供支援
    建立更聰明的合約:Go 如何為 KALP Studio 的區塊鏈解決方案提供支援
    随着区块链革命的蓬勃发展,开发智能合约对于利用区块链技术变得至关重要。智能合约本质上是去中心化应用程序 (dApp) 的支柱,有助于在没有中介的情况下促进、验证或执行协议。随着各种编程语言在智能合约开发中越来越受欢迎,Go(或 Golang) 越来越受欢迎。在这篇博客中,我们将深入探讨为什么 KAL...
    程式設計 發佈於2024-11-09
  • 在 Android 中實作 CheckBox Listener 時如何修復 Eclipse 錯誤?
    在 Android 中實作 CheckBox Listener 時如何修復 Eclipse 錯誤?
    Android CheckBox Listener:解決Eclipse 錯誤Android CheckBox Listener:解決Eclipse 錯誤嘗試在Android 中實作CheckBox 的偵聽器時,開發人員在使用時可能會遇到錯誤預設的OnCheckedChangeListener 類別。...
    程式設計 發佈於2024-11-09
  • 如何在 Linux 中使用「cpuid」指令存取 CPU 資訊?
    如何在 Linux 中使用「cpuid」指令存取 CPU 資訊?
    在Linux 上使用cpuid 指令存取CPU 資訊在這個問題中,開發人員試圖在Linux 環境中使用方法類似於Windows API 中的_cpuinfo() 函數。提供的程式碼嘗試利用彙編指令 (cpuid) 來檢索此訊息,但開發人員希望避免手動彙編的需要。 解決方案在於利用編譯程式碼時可用的 ...
    程式設計 發佈於2024-11-09
  • 如何確定 JavaScript 字串的位元組大小
    如何確定 JavaScript 字串的位元組大小
    確定JavaScript 字串的位元組大小在JavaScript 中,字串使用Unicode 字元編碼標準(稱為UCS-2)表示。這意味著字串中的每個字元通常由兩個位元組表示。但是,字串的實際位元組大小可能會有所不同,具體取決於傳輸過程中使用的字串編碼(例如 UTF-8)和特定瀏覽器實作等因素。 計...
    程式設計 發佈於2024-11-09
  • JavaScript 記憶
    JavaScript 記憶
    JavaScript 是一種功能強大的程式語言,在開發互動式網站方面發揮重要作用。然而,在處理複雜和資料密集型應用程式時,JavaScript 效能可能會成為一個問題。這就是記憶發揮作用的地方。透過釋放快取的力量,記憶化是一種可以顯著提高 JavaScript 效能的技術,使您的應用程式運行得更快、...
    程式設計 發佈於2024-11-09
  • 如何在 Linux 系統中使用 Python 建立預填輸入函數?
    如何在 Linux 系統中使用 Python 建立預填輸入函數?
    Python 中的輸入編輯Python 的 input() 和 raw_input() 函數本身不允許預先填入輸入編輯。然而,在Linux系統中,readline模組可以用來建立提供此功能的rlinput函數。 rlinput函數有兩個參數:prompt:顯示的提示字元給使用者。 prefill:在...
    程式設計 發佈於2024-11-09
  • 如何在 Java 中檢索文件建立日期?
    如何在 Java 中檢索文件建立日期?
    在Java 中檢索文件創建日期確定文件創建日期對於組織和管理文件至關重要,特別是在需要按時間順序排序時。在 Java 中,有一個利用 Java NIO 函式庫的解決方案。 NIO(新輸入/輸出)提供了檢索文件元資料(包括建立日期)的方法。僅當底層檔案系統支援時才能存取此元資料。 要使用NIO 存取檔...
    程式設計 發佈於2024-11-09
  • 如何用 Python 建立 Hangman 遊戲:逐步指南
    如何用 Python 建立 Hangman 遊戲:逐步指南
    Hangman 是一款经典的猜词游戏,非常有趣,对于初学者程序员来说是一个很棒的项目。 在本文中,我们将学习如何用 Python 构建一个简单版本的 Hangman 游戏。 最后,您将了解如何使用 Python 的基本控制结构、函数和列表来创建这个游戏。 什么是刽子手? Hang...
    程式設計 發佈於2024-11-09
  • 了解序列化和反序列化:方法、範例和最佳實踐
    了解序列化和反序列化:方法、範例和最佳實踐
    1.什麼是序列化和反序列化? 序列化和反序列化是將複雜的資料結構轉換為易於儲存或傳輸並隨後重建的格式的過程。 1.1 序列化 序列化是將物件或資料結構轉換為易於儲存(例如,在檔案或資料庫中)或傳輸(例如,透過網路)的格式的過程。這種格式通常是位元組流或文字格式,例...
    程式設計 發佈於2024-11-09
  • 根據建立日期向 MySQL 表格新增序號:逐步指南
    根據建立日期向 MySQL 表格新增序號:逐步指南
    隨著資料庫的成長和發展,我們經常發現自己需要新增欄位或修改現有結構。常見的場景是需要在現有資料表中新增序列 ID,特別是當我們希望該 ID 反映記錄所建立的時間順序時。在這篇部落格文章中,我們將逐步介紹在 MySQL 資料表中新增自動遞增序列 ID 的過程,該序列會依照建立日期列排序。 ...
    程式設計 發佈於2024-11-09
  • Angular 基礎:瞭解 TypeScript
    Angular 基礎:瞭解 TypeScript
    Angular 构建于 TypeScript 之上,它是 JavaScript 的超集,引入了类型安全,使开发人员能够在开发过程中而不是在运行时捕获潜在的错误。对于熟悉 TypeScript 的开发人员来说,这将是一个熟悉的场景,但如果您是 TypeScript 的新手,让我们回顾一下它的一些关键功...
    程式設計 發佈於2024-11-09

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3