精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

精品视频在线播放| 亚洲一二三区不卡| 国产精品丝袜视频| 曰本女人与公拘交酡| 国产 日韩 欧美 综合 一区| 精品久久香蕉国产线看观看gif| 欧美在线播放一区二区| 91麻豆成人精品国产| 国产在线欧美| 国产亚洲a∨片在线观看| 亚洲av无日韩毛片久久| а√天堂8资源在线| 中文字幕乱码一区二区免费| 91午夜理伦私人影院| 欧美精品亚洲精品日韩精品| 色男人天堂综合再现| 精品国产一二三| 国产九九在线视频| 白浆在线视频| 亚洲乱码国产乱码精品精98午夜 | 国产欧美视频在线观看| 国产成人精品免费视频大全最热| 国产精品自拍第一页| 国产精品国码视频| xxxx欧美18另类的高清| 女~淫辱の触手3d动漫| 国产精品一区二区三区美女| 欧美久久久久久久久久| 国产麻花豆剧传媒精品mv在线| 91一区二区三区在线| 中文一区在线播放| 蜜桃传媒视频麻豆一区| 国产91绿帽单男绿奴| 韩国精品一区二区| 国产成人亚洲综合91精品| 国产一级一级片| 欧美在线播放| 久久这里只有精品视频首页| www..com.cn蕾丝视频在线观看免费版| 哺乳挤奶一区二区三区免费看| 欧美高清视频www夜色资源网| 999香蕉视频| 蜜桃av在线| 亚洲va欧美va人人爽| 免费看日b视频| 欧美一区二区三区在线观看免费| 国产无一区二区| 久久国产日韩欧美| 四虎永久在线精品免费网址| 风间由美性色一区二区三区| 91九色极品视频| 国产精品一级视频| 久草中文综合在线| 91精品久久久久久综合乱菊| 中文字幕一区二区三区波野结 | 2021国产精品视频| 日本在线观看视频网站| 在线精品一区二区| 性色av一区二区三区红粉影视| 亚洲熟女www一区二区三区| 伊人久久大香线| 欧美乱妇高清无乱码| 真实国产乱子伦对白在线| 亚洲影视一区二区三区| 毛片精品免费在线观看| 九九热视频精品| 激情综合在线| 欧美孕妇毛茸茸xxxx| 国产91国语对白在线| 三级精品在线观看| 国产精品成人久久久久| 伊人22222| 狠狠色丁香久久婷婷综| 亚洲自拍偷拍第一页| 亚洲精品97久久中文字幕| 成人激情校园春色| 麻豆av福利av久久av| melody高清在线观看| 国产精品电影院| 国产成人永久免费视频| 天堂av中文在线观看| 日本乱码高清不卡字幕| 日本中文字幕二区| 亚洲精品在线a| 日韩精品免费视频| 91麻豆精品久久毛片一级| 亚洲精品在线观看91| 欧美激情女人20p| 久久久免费高清视频| 老司机精品视频一区二区三区| 国产欧美日韩视频| 国精品人妻无码一区二区三区喝尿 | 国产精品日韩欧美综合| 国产手机精品视频| 不卡的av中国片| 亚洲高清在线观看一区| 污视频在线看网站| 日本乱人伦一区| 国内av免费观看| 五月国产精品| 美日韩丰满少妇在线观看| 久久黄色精品视频| 国产精品自拍网站| 欧美成ee人免费视频| 羞羞视频在线观看免费| 日韩欧亚中文在线| 特种兵之深入敌后| 国产麻豆一区二区三区精品视频| 久久亚洲精品一区| 天天干,天天干| 国产69精品久久777的优势| 日本成人三级电影网站| 日本在线视频网址| 欧美体内she精视频| 免费日本黄色网址| 亚洲精品久久| 国产精品网站大全| 无码精品在线观看| 亚洲精品国产无套在线观| 精品久久久噜噜噜噜久久图片| 高清精品xnxxcom| 久久久精品在线观看| 99久久久无码国产精品免费蜜柚| 丁香亚洲综合激情啪啪综合| 亚洲资源视频| 亚洲高清黄色| 日韩电影大片中文字幕| 久久一区二区三| 精品一区二区久久久| 欧美日韩综合久久| 乱馆动漫1~6集在线观看| 欧美一区二视频| 潮喷失禁大喷水aⅴ无码| 欧美亚洲网站| 精品午夜一区二区| free性m.freesex欧美| 制服丝袜av成人在线看| 青青青视频在线播放| 乱码第一页成人| 免费观看国产成人| 在线毛片观看| 日韩精品亚洲元码| 日韩在线视频免费播放| av网站免费线看精品| 精品成在人线av无码免费看| 亚洲国产高清在线观看| 欧美精品生活片| 国产jzjzjz丝袜老师水多| 亚洲人成小说网站色在线| 成人性生交免费看| 日韩精品一区二区久久| 国产精品一区久久| 一本一道波多野毛片中文在线| 在线观看亚洲a| 一级片久久久久| 奇米四色…亚洲| 一区二区视频在线播放| 日韩成人在线电影| 久久久精品在线| 丰满熟妇人妻中文字幕| 亚洲国产一区二区三区| 喷水视频在线观看| 视频一区欧美精品| 亚洲高清资源综合久久精品| 欧美91在线|欧美| 久久香蕉国产线看观看网| 国产伦精品一区二区三区四区| 亚洲精品成人在线| 久久精品女同亚洲女同13| 国产日韩一区| 日韩精彩视频| 久久精品九色| 国模吧一区二区三区| 欧美偷拍视频| 欧美日韩精品免费观看视频| 强乱中文字幕av一区乱码| 成人福利视频在线| www.日本xxxx| 午夜久久美女| 麻豆久久久9性大片| h1515四虎成人| 久久6精品影院| 日本视频在线观看一区二区三区| 精品视频一区二区不卡| 美女视频黄免费| 国产亚洲精品久| 992tv人人草| 一本色道久久综合亚洲精品高清 | 91青青国产在线观看精品| 3d动漫啪啪精品一区二区免费| 成人黄色动漫| 色噜噜狠狠狠综合曰曰曰88av| 精品人妻少妇AV无码专区| 欧美午夜精品在线| 99热在线观看精品| 99久久er热在这里只有精品15 | 国产一区二区三区免费视频| 国产精品一二三四五区| 欧美日韩精品在线| 麻豆网址在线观看| 久久色.com| 久久精品无码一区二区三区毛片| 国产日韩亚洲欧美精品| 麻豆中文字幕在线观看| 少妇精品久久久一区二区三区| 国产主播在线一区| 天堂中文最新版在线中文| 久久精品国产一区二区电影| 日韩中文字幕免费观看| 欧美精品乱码久久久久久| 影音先锋亚洲天堂| 成人免费在线视频观看| av无码一区二区三区| 韩国三级电影一区二区| 亚洲视频在线a| 亚洲国产日本| 国产又爽又黄ai换脸| 国产亚洲一卡2卡3卡4卡新区| 91在线短视频| 亚洲天堂资源| 久久久女女女女999久久| 91xxx在线观看| 日韩精品视频观看| 亚洲精选一区二区三区| 欧美另类久久久品| 精品一区二三区| 精品免费在线视频| 久久国产免费观看| 日韩理论片一区二区| 日韩av片在线| 久久久久久久久99精品| 妖精视频一区二区| 国产福利一区在线| 人妻换人妻仑乱| 精品制服美女久久| 天天操,天天操| 日韩电影在线免费观看| 欧美精品色婷婷五月综合| 一区二区三区成人精品| 精品一区二区三区无码视频| 91久久电影| 青青草原国产免费| 久久精品亚洲欧美日韩精品中文字幕| 亚洲人成人77777线观看| 国内精品久久久久久99蜜桃| 欧美日韩亚洲免费| 亚洲宅男一区| 欧美久久综合性欧美| 亚洲精品蜜桃乱晃| 欧美午夜精品久久久久免费视| 色先锋久久影院av| 欧美精品亚洲精品| 精品精品99| 三区精品视频观看| 第一sis亚洲原创| 一区二区精品国产| 天堂美国久久| 亚洲天堂第一区| 国产精品啊啊啊| 精品人妻少妇一区二区| 一区二区动漫| 91黄色小网站| 奇米色777欧美一区二区| 污污网站在线观看视频| 国产精品一区二区男女羞羞无遮挡| 波多野结衣在线免费观看| 国产suv一区二区三区88区| 大桥未久恸哭の女教师| 26uuu精品一区二区在线观看| 在哪里可以看毛片| 国产精品麻豆欧美日韩ww| 潘金莲一级黄色片| 亚洲一区二区黄色| 好看的av在线| 欧美人与z0zoxxxx视频| 精品国产九九九| 日韩精品福利网站| porn视频在线观看| 欧美日韩成人在线观看| 色在线中文字幕| 成人激情在线观看| 成人搞黄视频| 日韩欧美在线电影| 亚洲天堂免费| 精品国产免费av| 久久国产尿小便嘘嘘| 18禁一区二区三区| 久久久久久久网| 日本少妇高清视频| 欧美日韩国产色视频| 在线视频播放大全| 精品久久久久久亚洲综合网| 男操女在线观看| 欧美www在线| 超级碰碰久久| 91精品黄色| 欧美日韩在线二区| 日本aa在线观看| 蜜臀久久久99精品久久久久久| 韩国三级在线看| 欧美国产一区视频在线观看| 久久网免费视频| 欧美在线观看一区| 日本激情一区二区| 亚洲欧美激情小说另类| 一区二区三区国产福利| 欧美日韩国内| 一区二区三区免费播放| 成人av免费在线| 国产免费一区二区三区四区| 调教+趴+乳夹+国产+精品| 国产影视一区二区| 亚洲天堂免费视频| 黄色影院在线看| 国产综合色香蕉精品| 在线日韩一区| 人妻夜夜添夜夜无码av| 国精产品一区一区三区mba桃花| 超碰97人人干| 午夜精品久久久久久久99水蜜桃 | 超碰手机在线观看| 色噜噜狠狠色综合中国| 天堂在线资源网| 久久91精品国产91久久久| 日韩免费在线电影| 色视频一区二区三区| 亚洲一区二区网站| 野战少妇38p| 一区二区三区国产精品| 91麻豆成人精品国产| 正在播放欧美一区| 在线观看欧美日韩电影| 韩国一区二区三区美女美女秀| 中文字幕一区二区av| 永久免费的av网站| 日本一区二区三区在线观看| 午夜精品一区二| 亚洲欧美在线免费| 亚洲美女尤物影院| 国产精品制服诱惑| 好吊日精品视频| 国产人妖在线观看| 亚洲午夜视频在线| 天堂中文资源在线观看| 国产+人+亚洲| 男人的天堂久久| 欧美日韩在线视频一区二区三区| 成人av高清在线| 国产精品黄色大片| 亚洲精品永久免费| 中文在线аv在线| 欧美精品二区三区四区免费看视频 | 国产精品成人3p一区二区三区| 久久免费看毛片| 国产精品一区二区免费不卡| 欧美日韩人妻精品一区二区三区| 日韩一级欧美一级| 欧美78videosex性欧美| 高清国产一区| 一区二区三区精品视频在线观看| 亚洲av成人片色在线观看高潮| 日韩欧美a级成人黄色| 国产粉嫩一区二区三区在线观看 | 中文无码精品一区二区三区| 中文字幕日韩欧美精品在线观看| 992tv国产精品成人影院| 在线观看欧美激情| 国产一区不卡视频| 久久久美女视频| 精品亚洲男同gayvideo网站| 成人网ww555视频免费看| 宅男在线精品国产免费观看| 国产福利视频一区二区三区| 日本特黄一级片| 亚洲深夜福利在线| 色综合视频一区二区三区44| 日产精品久久久久久久蜜臀| 99久久综合精品| 国产精品无码一区| 欧美日韩国产va另类| 秋霞影视一区二区三区| 欧美一级特黄a| 一区二区三区四区在线免费观看| 日本在线一二三| 国产在线拍偷自揄拍精品| 国产一区日韩一区| 人人人妻人人澡人人爽欧美一区| 在线播放中文一区| 阿v视频在线| 一区二区三区在线观看www| 成人听书哪个软件好| 青青视频在线播放| 日本久久免费| 亚洲国产一区二区在线| 国产精品自在在线| 人妻 日韩精品 中文字幕| 久久伊人91精品综合网站| 欧美日韩一区二区三区在线电影 | av资源吧首页| 中文字幕不卡av|