精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

五種在 TypeScript 中使用類型保護的方法

開發 前端
類型保護是一個執行運行時檢查的表達式,以保證某個范圍內的類型。類型保護的一個典型應用場景是縮小聯合類型的類型范圍。這是為了保證類型安全,即在運行時安全地訪問特定類型對象中的特定屬性或方法。

類型保護是一個執行運行時檢查的表達式,以保證某個范圍內的類型。類型保護的一個典型應用場景是縮小聯合類型的類型范圍。這是為了保證類型安全,即在運行時安全地訪問特定類型對象中的特定屬性或方法。

在這篇文章中,我將介紹 5 種實現類型保護的方法。

01、typeof 類型保護

首先我們來介紹一下比較常見的typeof類型防護。typeof 運算符可以在運行時獲取對象的類型,該運算符返回以下可能的值:

  • "string"
  • "number"
  • "bigint"
  • "boolean"
  • "symbol"
  • "undefined"
  • "object"
  • "function"

因此使用 typeof 運算符,我們可以在運行時獲取變量的實際類型。舉個例子:

function printId(id: string | number) {
  if (typeof id === "string") {
    console.log(`ID: ${id.toUpperCase()}`);
  } else if (typeof id === "number") {
    console.log(`ID: ${id}`);
  }
}

在上面的代碼中,我們定義了一個 printId 函數,它包含一個 id 參數,其類型為字符串 | 數字聯合類型。

在函數體中,我們使用 typeof 運算符來確定參數的實際類型。如果id參數是字符串類型,我們會將其值轉換為大寫后再輸出。

那么為什么要使用 typeof 運算符來縮小 id 參數的類型呢?主要原因是為了保證運行時的類型安全。例如,當id參數的類型是數字類型時,但是我們調用id.toUpperCase()方法,就會拋出運行時異常。

在支持 TypeScript IntelliSense 的編輯器中,當您訪問 id 參數的某些屬性時,只能訪問字符串和數字類型的公共屬性。具體如下圖所示:

02、instanceof 類型守衛

雖然typeof運算符可以區分不同的類型,但如果我們想判斷一個對象是否是某個類的實例,從而安全地訪問該實例上特有的屬性或方法,那么typeof運算符就無能為力了。

對于這個需求,我們可以使用instanceof運算符。再次,我們舉一個具體的例子:

class Shape {
  constructor(public id: string) {}
}


class Circle extends Shape {
  constructor(
    public id: string, 
    public radius: number) {
   super(id);
  }
}


class Square extends Shape {
  constructor(
    public id: string, 
    public sideLength: number) {
      super(id);
  }
}

在上面的代碼中,我們定義了一個Shape類,并基于它創建了兩個子類。接下來,我們定義一個 printShapeInfo 函數來打印有關不同形狀的信息:

function printShapeInfo(shape: Shape) {
  if (shape instanceof Circle) {
    console.log(`Circle's radius is: ${shape.radius}`);
  } else if (shape instanceof Square) {
    console.log(`Square's sideLength is: ${shape.sideLength}`);
  }
}

在printShapeInfo函數體中,我們使用instanceof運算符來縮小形狀參數的類型,從而輸出不同形狀的信息。在 if...else if 分支之外,我們只能訪問 Circle 對象和 Square 對象共有的 id 屬性。

03、in type guards

對于前面使用instanceof運算符實現類型保護的示例,我們還可以使用接口的形式來描述Shape、Circle和Square類型。

interface Shape {
  id: string;
}


interface Circle extends Shape {
  radius: number;
}


interface Square extends Shape {
  sideLength: number;
}

由于TypeScript接口定義的類型在編譯后并不會生成對應的類型,因此我們無法在運行時使用instanceof運算符進行類型檢測。要實現printShapeInfo函數的功能,我們可以使用in運算符,具體實現如下:

function printShapeInfo(shape: Shape) {
  if ("radius" in shape) {
    console.log(`Circle's radius is: ${shape.radius}`);
  } else if ("sideLength" in shape) {
    console.log(`Square's sideLength is: ${shape.sideLength}`);
  }
}

除了上述方法之外,我們還可以使用可判別聯合類型來表示Shape類型:

type Circle = {
  id: string;
  type: "circle";
  radius: number;
};


type Square = {
  id: string;
  type: "square";
  sideLength: number;
};


type Shape = Circle | Square;

在Circle和Square類型中,type屬性的類型是字符串文字類型,用于區分不同的形狀,稱為可區分屬性。對于判別聯合類型,結合switch…case語句,我們還可以實現printShapeInfo函數對應的功能。

function printShapeInfo(shape: Shape) {
  switch (shape.type) {
    case "circle":
      console.log(`Circle's radius is: ${shape.radius}`);
      break;
    case "square":
      console.log(`Square's sideLength is: ${shape.sideLength}`);
      break;
    default:
      console.log("Unknown shape");
  }
}

介紹完如何使用常見的 typeof、instanceof 和 in 運算符實現類型保護之后,我們來介紹一下如何定義用戶自定義的類型保護。

04、用戶定義的類型保護

為了演示用戶定義的類型保護,讓我們重新定義 3 種類型:

interface Shape {
  id: string;
}


interface Circle extends Shape {
  radius: number;
}


interface Square extends Shape {
  sideLength: number;
}

定義完Shape相關的類型后,我們來定義用戶自定義的類型保護函數:

function isCircle(shape: Shape): shape is Circle {
  return "radius" in shape;
}


function isSquare(shape: Shape): shape is Square {
  return "sideLength" in shape;
}

與普通函數相比,自定義類型保護函數返回類型謂詞。上面代碼中的 shape is Circle 就是所謂的類型謂詞。謂詞采用parameterName is Type 的形式,其中parameterName 必須是當前函數簽名中的參數名稱。

這樣就可以理解isCircle用戶自定義類型保護函數的作用了。如果函數返回值為true,則shape參數的類型為Circle類型。

現在我們有了 isCircle 和 isSquare 函數,我們可以在 printShapeInfo 函數中使用它們,如下所示:

function printShapeInfo(shape: Shape) {
  if (isCircle(shape)) {
    console.log(`Circle's radius is: ${shape.radius}`);
  } else if (isSquare(shape)) {
    console.log(`Square's sideLength is: ${shape.sideLength}`);
  }
}

05、相等縮小類型防護

除了前面描述的 4 種類型保護方法之外,TypeScript 還支持使用 if/switch 語句和相等檢查,例如 ===、!===、== 和 != 運算符來縮小變量的類型。

function printValues(a: string | number, b: string | string[]) {
  if (a === b) {
    console.log(a.toUpperCase()); // (parameter) a: string
    console.log(b.toUpperCase()); // (parameter) b: string
  } else {
    console.log(a); // (parameter) a: string | number
    console.log(b); // (parameter) b: string | string[]
  }
}

上面的代碼中,printValues函數支持a和b 2個參數,并且它們的類型都是聯合類型。當a===b表達式的計算結果為true時,參數a和b的類型將縮小為字符串類型。當然,使用!==運算符也可以用來實現類型縮小。

function printValues2(a: string | number, b: string | string[]) {
  if (a !== b) {
    console.log(a); // (parameter) a: string | number
    console.log(b); // (parameter) b: string | string[]
  } else {
    console.log(a.toLowerCase()); // (parameter) a: string
    console.log(b.toLowerCase()); // (parameter) b: string
  }
}

這就是關于 TypeScript 類型防護的全部內容。

總結

以上就是我今天想與你分享的5個TS的知識技能,希望對你有所幫助。

責任編輯:華軒 來源: web前端開發
相關推薦

2010-07-27 13:05:12

Flex

2023-09-27 10:19:37

類型video函數

2025-01-20 00:13:19

TypeScript操作符數據類型

2021-09-14 08:00:00

云計算機器ID技術

2023-10-20 10:17:23

2021-03-05 10:17:32

保護組織勒索軟件網絡安全

2021-08-27 16:26:11

敏感數據

2025-03-03 08:06:39

DeepSeek方法工具

2013-08-26 09:51:57

2020-06-18 10:26:43

JavaScript開發技術

2023-11-21 15:23:15

JavaScript工具

2020-06-04 08:17:44

JavaScript延展操作運算符開發

2022-10-11 16:53:22

GitLinux

2022-08-30 20:00:37

零信任Linkerd

2022-06-10 08:01:17

ReduxReact

2023-05-04 07:09:08

2011-05-18 14:10:18

敏感數據安全數據泄漏

2023-05-05 06:56:13

2023-04-26 15:17:33

Vue 3開發前端

2023-06-02 15:42:51

JavaScript數據結構對象
點贊
收藏

51CTO技術棧公眾號

国产精品xxxx喷水欧美| 久久99999| 手机看片1024国产| 噜噜噜躁狠狠躁狠狠精品视频| 日韩经典中文字幕| 91香蕉视频导航| 午夜在线激情影院| 91免费版在线| 成人免费观看a| 九九热在线视频播放| 91亚洲国产成人久久精品| 日韩精品中文字幕一区二区三区 | 久久人人精品| 久久天堂电影网| 中文字幕一区二区三区人妻| 亚洲国产伊人| 欧美日韩在线观看视频| 国产免费xxx| 国产在线你懂得| 国产99一区视频免费| 国产成人啪精品视频免费网| 免费网站观看www在线观| 伊人春色精品| 日韩av在线一区| 日本黄色一级网站| 播放一区二区| 亚洲成人你懂的| 精品一区二区成人免费视频 | 欧美国产日韩一区二区在线观看 | 最新国产黄色网址| 夜鲁夜鲁夜鲁视频在线播放| 一区二区理论电影在线观看| 亚洲精品视频一二三| 涩涩视频在线观看免费| 国产91精品精华液一区二区三区 | 综合色天天鬼久久鬼色| 青青草成人激情在线| 免费观看黄色一级视频| 国产尤物一区二区在线| 国产精品一区二区三区免费视频| 五月天综合激情网| 精品二区久久| 久久99国产精品自在自在app| 国产99在线 | 亚洲| 亚洲性视频大全| 日韩精品www| 亚洲av成人片色在线观看高潮| 日韩在线成人| 日韩欧美一二三区| 在线观看日本www| 宅男噜噜噜66国产精品免费| 欧美日韩中文字幕一区| 日韩一级片播放| 韩国美女久久| 欧美性猛交xxxx乱大交极品| 国产黄视频在线| 天堂а√在线最新版中文在线| 精品久久久久久中文字幕一区奶水 | xxxx一级片| 日本欧美一区| 欧美三级三级三级爽爽爽| 久草综合在线观看| 91精品美女| 欧美日韩一区 二区 三区 久久精品| 欧美视频免费播放| 日本综合视频| 欧美日韩久久久久久| 色啦啦av综合| 国产成人免费av一区二区午夜 | 日本中文字幕有码| 视频精品一区二区三区| 欧美大片一区二区| 亚洲色图欧美日韩| 无码日韩精品一区二区免费| 亚洲欧美国产另类| 超碰97av在线| 亚洲网色网站| 久久乐国产精品| 特黄视频免费看| 日韩电影在线看| 91精品久久久久久久久| 亚洲av无码乱码国产精品久久| 高清成人免费视频| 蜜桃精品久久久久久久免费影院 | 久久99久久久久久久噜噜| 国产香蕉在线视频| 久久亚洲色图| 成人高清视频观看www| 亚洲av无码国产精品久久不卡| av在线播放不卡| 日韩亚洲视频在线| 成人在线影视| 欧美视频在线看| 亚洲免费999| 国产精品欧美大片| 一本大道亚洲视频| 美女的奶胸大爽爽大片| 亚洲一区二区成人| 成人精品网站在线观看| 免费观看国产精品| 中文字幕中文字幕一区| 加勒比成人在线| 欧美电影在线观看网站| 精品久久久三级丝袜| 这里只有久久精品| 好吊一区二区三区| 国产精品久久色| www香蕉视频| 国产三级欧美三级日产三级99| 亚洲成人第一| 国产资源在线观看入口av| 欧美色男人天堂| 日本久久久久久久久久| 欧美日韩一二三四| 欧美成人在线免费视频| 欧美 日韩 精品| 韩国一区二区三区| 国产精品欧美激情在线播放| www三级免费| 欧美激情一二三区| 秋霞无码一区二区| 先锋影音一区二区| 亚洲美女av网站| 欧美三级日本三级| 国产精品婷婷| 亚洲伊人久久大香线蕉av| 免费毛片在线| 亚洲一区二区三区自拍| www.com黄色片| 国产调教精品| 久久久999国产精品| 亚洲大片免费观看| 成人午夜精品在线| 国产成人三级视频| av成人在线播放| 日韩电视剧在线观看免费网站| 国产少妇在线观看| 一本久久综合| 99re视频| 久久黄色美女电影| 精品视频一区三区九区| 久久久久久久久免费看无码 | 日韩在线免费视频观看| 波多野结衣 久久| 波多野结衣中文字幕一区二区三区| 欧美日韩视频免费在线观看| 欧美不卡高清一区二区三区| 日韩高清不卡av| 神马久久久久久久久久久| 美女久久网站| 鲁丝片一区二区三区| 97超碰免费在线| 欧美va亚洲va| 曰本女人与公拘交酡| 精品一区二区三区在线观看| 亚洲 国产 欧美一区| 黑人精品一区| 国产视频在线观看一区二区| 黄色片视频网站| 成人国产电影网| bt天堂新版中文在线地址| 一区二区三区四区精品视频| 久久国产精品久久久久久| 国产精品欧美激情在线| 中文字幕一区二区5566日韩| 色综合色综合色综合色综合| 精品国产一区探花在线观看| 欧美一级大片在线观看| 你懂的在线观看| 色美美综合视频| 一区二区三区伦理片| 日韩不卡一区二区三区| 日韩三级电影| 成人在线高清| 久久久www成人免费精品张筱雨| 亚洲在线观看av| 中文一区一区三区高中清不卡| 精品中文字幕av| 猛男gaygay欧美视频| 日本电影亚洲天堂| 黄色av免费在线看| 欧美日韩一卡二卡| 欧美人禽zoz0强交| 99免费精品在线观看| 久色视频在线播放| 蜜桃一区二区三区| 国产精品久久色| 国产成人l区| 亚洲国内精品在线| 伊人成人在线观看| 亚洲线精品一区二区三区八戒| 欧美激情 亚洲| 久久久久国产一区二区| 亚洲综合欧美日韩| vam成人资源在线观看| 欧美精品一区三区| 天天av天天翘| 欧美日韩三级一区| 免费一级片在线观看| 99re这里只有精品视频首页| 欧美精品成人网| 91成人看片| 精品卡一卡二| 狂野欧美性猛交xxxx| 欧美黑人一级爽快片淫片高清| 91精品国产乱码久久| 午夜视频在线观看一区二区三区| www.av欧美| 国产精品系列在线播放| heyzo亚洲| 久久视频精品| 国内成+人亚洲| 成人黄色在线| 欧美激情亚洲一区| 精品一二三区视频| 日韩一级二级三级| 日产精品久久久久久久| 日本一区二区三区高清不卡| 亚洲精品成人无码毛片| 石原莉奈在线亚洲三区| 97碰在线视频| 国产精品麻豆久久| 免费观看成人在线| 国产日韩在线观看视频| 国产97色在线|日韩| 日本在线视频网址| 在线精品国产欧美| 不卡的日韩av| 欧美区一区二区三区| 99久久精品国产亚洲| 亚洲精品菠萝久久久久久久| 日韩不卡av在线| 成人av在线资源网| 人妻换人妻仑乱| 免费成人美女在线观看.| 日韩欧美一区二| 欧美在线资源| 亚洲一区不卡在线| 狠狠操综合网| 久久精品国产精品青草色艺| 狂野欧美性猛交xxxx| 日本精品久久电影| h视频在线免费观看| 中文字幕av日韩| 精品av中文字幕在线毛片| 亚洲高清免费观看高清完整版| 国产麻豆91视频| 欧美精品粉嫩高潮一区二区| 国产黄色免费视频| 一本到不卡免费一区二区| 国产一级特黄aaa大片| 一区二区不卡在线视频 午夜欧美不卡在| 一本在线免费视频| 日本一区二区在线不卡| 37p粉嫩大胆色噜噜噜| 国产91高潮流白浆在线麻豆 | 九九久久99| 国产区精品视频在线观看豆花| 国产在线一区二| 国产福利资源一区| 国产在线精品一区二区中文| 成人激情自拍| 国产精品永久入口久久久| 精品久久毛片| 国产精品亚发布| 成人在线免费av| 国产精品视频999| 精品美女一区| 国产欧美久久一区二区| 婷婷激情成人| 91沈先生作品| 911亚洲精品| 国内精品国语自产拍在线观看| 欧美高清视频看片在线观看| 精品国产aⅴ麻豆| 亚瑟一区二区三区四区| 欧美亚洲丝袜| 色乱码一区二区三区网站| 亚洲欧洲日韩综合二区| 色中色综合网| 国产精品一区在线免费观看| 五月久久久综合一区二区小说| 中文字幕乱码一区二区三区| 久久网站免费观看| 女人床在线观看| 国产精品久久久久久久久久妞妞 | 99xxxx成人网| 欧美成人黑人猛交| 理论片日本一区| 少妇丰满尤物大尺度写真| 成人黄色小视频在线观看| 亚洲图片综合网| 成人福利电影精品一区二区在线观看| 完美搭档在线观看| 国产拍欧美日韩视频二区| 99久久人妻无码中文字幕系列| 久久先锋资源网| 国产无遮挡在线观看| 亚洲精品videosex极品| 国产在线观看99| 欧美日韩大陆在线| 可以免费观看的毛片| 亚洲人成电影网站色www| 国产黄网站在线观看| 久久久之久亚州精品露出| 高清电影一区| 91精品黄色| 久久不见久久见国语| 天天干天天色天天爽| 中文字幕av亚洲精品一部二部| 青青青免费在线| 久久精品久久99精品久久| 久久精品一卡二卡| 91亚洲男人天堂| 可以直接看的黄色网址| 欧美性猛交xxxx黑人猛交| av在线亚洲天堂| 国产一区二区黑人欧美xxxx| 午夜激情在线| 国产精品久久一| 国产伦精品一区二区三区免费优势 | 女人18毛片毛片毛片毛片区二 | 777xxx欧美| 久久久久久女乱国产| 午夜精品理论片| 精品国产18久久久久久二百| 国产成人av一区二区三区| 日韩中文在线电影| 97视频久久久| 国产丶欧美丶日本不卡视频| 国产国语性生话播放| 亚洲欧洲国产专区| 无码人妻一区二区三区免费| 欧美精品1区2区| 黄视频在线观看免费| 91精品国产91久久| 欧美视频二区欧美影视| 中国成人亚色综合网站| 日韩高清欧美激情| 日本r级电影在线观看| 中文字幕亚洲成人| 黄瓜视频在线免费观看| 日韩精品视频在线观看网址| 欧美日韩色网| 亚洲在线观看视频网站| 欧美精品一区二区久久| 国产91对白刺激露脸在线观看| 成人av资源站| 精品97人妻无码中文永久在线| 一本大道av伊人久久综合| 免费国产羞羞网站视频| 欧美成人精品一区| 成人永久在线| 中文字幕色一区二区| 日本午夜一区二区| www.日本高清视频| 欧美性猛交xxxx黑人交| 国产在线网站| 欧美在线观看网站| 丝袜连裤袜欧美激情日韩| 无码av天堂一区二区三区| 国产成人综合亚洲网站| 女性裸体视频网站| 欧美日韩国产精品自在自线| 日韩av视屏| 青青久久av北条麻妃黑人| 女人丝袜激情亚洲| 无码无遮挡又大又爽又黄的视频| 2023国产精品自拍| 久久久精品人妻一区二区三区四| 日韩欧美在线123| 欧美videossex| 国产在线一区二区三区欧美| 亚洲影院一区| 五十路六十路七十路熟婆| 色综合视频一区二区三区高清| 免费在线黄色电影| 国产精品免费小视频| 成人黄色av| 色偷偷中文字幕| 亚洲国产日韩在线一区模特| 神马午夜电影一区二区三区在线观看| 久久精品99久久香蕉国产色戒| 久久免费福利| 久在线观看视频| 99精品在线免费| 最近中文字幕在线视频| 精品久久久999| avav成人| 欧美视频在线第一页| av在线不卡网| 中国一级片黄色一级片黄| 久久资源免费视频| 成人福利免费在线观看| 亚洲中文字幕久久精品无码喷水| 中文字幕在线一区| 蜜桃视频污在线观看| 热99在线视频| 99热精品久久| 黄色激情在线观看|