最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

TypeScript學(xué)習(xí)筆記之類型縮小

 更新時(shí)間:2022年09月03日 10:29:26   作者:林有酒  
在TypeScript中若一個(gè)變量使用了聯(lián)合類型,那么當(dāng)我們使用該變量時(shí)必不可少的會(huì)去明確的限制該變量的具體類型,這稱為類型縮小,這篇文章主要給大家介紹了關(guān)于TypeScript學(xué)習(xí)筆記之類型縮小的相關(guān)資料,需要的朋友可以參考下

類型縮小

什么是類型縮小呢?

類型縮小的英文是 Type Narrowing;

我們可以通過類似于 typeof padding === "number" 的判斷語句,來改變TypeScript的執(zhí)行路徑;

在給定的執(zhí)行路徑中,我們可以縮小比聲明時(shí)更小的類型,這個(gè)過程稱之為縮小;

而我們編寫的 typeof padding === "number 語句可以稱之為 類型保護(hù)( type guards);

常見的類型保護(hù)有如下幾種:

  • typeof
  • 平等縮?。ū热?==、 !==)
  • instanceof
  • in
  • 等等…

我們主要講解typeof、平等縮小、instanceof、in這四種

typeof

在TypeScript中,檢查返回的值typeof是一種類型保護(hù):因?yàn)門ypeScript對(duì)如何typeof操作不同的值進(jìn)行編碼。

例如我們有下面一個(gè)常見, 封裝一個(gè)函數(shù), 函數(shù)要求傳入?yún)?shù)ID, 傳入的ID有可能是string類型有可能是number類型

當(dāng)傳入的ID是string類型時(shí), 要求將ID的字母全部轉(zhuǎn)為大寫

function printID(id: string|number) {
  if (typeof id === "string") {
    console.log(id.toUpperCase())
  } else {
    console.log(id)
  }
}

// 測(cè)試
printID(123)
printID("aaa")
  • 上面代碼中, 整個(gè)if判斷語句就是類型縮小, 例如當(dāng)代碼進(jìn)入if語句第一個(gè)分支時(shí), 一定是string類型, 進(jìn)入第二個(gè)分支一定是number類型
  • if的判斷語句就稱為類型保護(hù)

平等縮小

我們可以使用Switch或者相等的一些運(yùn)算符來表達(dá)相等性(比如=== , !== , == , and != ):

type Direction = "left" | "right" | "top" | "bottom"
function printDirection(direction: Direction) {
  // 平等類型縮小
  switch (direction) {
    case "left":
      console.log(direction)
      break
    case "right":
      console.log(direction)
      break
    case "top":
      console.log(direction)
      break
    case "bottom":
      console.log(direction)
      break
    default:
      console.log("調(diào)用默認(rèn)方法")
  }
}

// 測(cè)試
printDirection("left")
printDirection("right")
printDirection("top")
printDirection("bottom")

instanceof

JavaScript 有一個(gè)運(yùn)算符來檢查一個(gè)值是否是另一個(gè)值的“實(shí)例”:

function printTime(time: string|Date) {
  // 判斷time是否是Date的實(shí)例
  if (time instanceof Date) {
    console.log(time.toUTCString())
  } else {
    console.log(time)
  }
}

// 測(cè)試
printTime("2020-01-02")
const date = new Date()
printTime(date)

如果不好理解我們可以看下面這個(gè)例子

class Teacher {
  working() {
    console.log("正在工作")
  }
}

class Student {
  studying() {
    console.log("正在學(xué)習(xí)")
  }
}

function work(p: Student | Teacher) {
  // 判斷是哪一個(gè)實(shí)例
  if (p instanceof Teacher) {
    p.working()
  } else {
    p.studying()
  }
}

// 測(cè)試
const stu = new Student()
const tec = new Teacher()

work(stu) // 正在學(xué)習(xí)
work(tec) // 正在工作

in

Javascript 有一個(gè)運(yùn)算符,用于確定對(duì)象是否具有帶名稱的屬性: in運(yùn)算符

如果指定的屬性在指定的對(duì)象或其原型鏈中,則in 運(yùn)算符返回true;

// () => void表示是一個(gè)函數(shù)類型
type Dog = {running: () => void}
type Fish = {swimming: () => void}

function walk(animal: Dog|Fish) {
  // 判斷函數(shù)是否在animal中
  if ("swimming" in animal) {
    animal.swimming()
  } else {
    animal.running()
  }
}

// 測(cè)試
const dog: Dog = {
  running() {
    console.log("狗是跑的")
  }
}
const fish: Fish = {
  swimming() {
    console.log("魚是游的")
  }
}

walk(dog) // 狗是跑的
walk(fish) // 魚是游的

總結(jié)

到此這篇關(guān)于TypeScript類型縮小的文章就介紹到這了,更多相關(guān)TypeScript類型縮小內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 微信小程序新增的拖動(dòng)組件movable-view使用教程

    微信小程序新增的拖動(dòng)組件movable-view使用教程

    這篇文章主要給大家介紹了微信小程序最近新增的拖動(dòng)組件movable-view的簡單使用教程,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • 使用JavaScript實(shí)現(xiàn)輪播圖效果

    使用JavaScript實(shí)現(xiàn)輪播圖效果

    這篇文章主要為大家詳細(xì)介紹了使用JavaScript實(shí)現(xiàn)輪播圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 關(guān)于UTF-8的客戶端用AJAX方式獲取GB2312的服務(wù)器端亂碼問題的解決辦法

    關(guān)于UTF-8的客戶端用AJAX方式獲取GB2312的服務(wù)器端亂碼問題的解決辦法

    客戶端是UTF-8編碼,這也是現(xiàn)在大家公認(rèn)的標(biāo)準(zhǔn)編碼在這種情況下,實(shí)用AJAX異步獲取GB2312編碼的服務(wù)器端信息時(shí),不可避免的要遇到漢字亂碼問題
    2010-11-11
  • 微信小程序仿知乎實(shí)現(xiàn)評(píng)論留言功能

    微信小程序仿知乎實(shí)現(xiàn)評(píng)論留言功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序仿知乎實(shí)現(xiàn)評(píng)論留言功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Echarts實(shí)現(xiàn)點(diǎn)擊列表聯(lián)動(dòng)餅圖的示例代碼

    Echarts實(shí)現(xiàn)點(diǎn)擊列表聯(lián)動(dòng)餅圖的示例代碼

    本文主要介紹了Echarts實(shí)現(xiàn)點(diǎn)擊列表聯(lián)動(dòng)餅圖的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • JS實(shí)現(xiàn)控制表格內(nèi)指定單元格內(nèi)容對(duì)齊的方法

    JS實(shí)現(xiàn)控制表格內(nèi)指定單元格內(nèi)容對(duì)齊的方法

    這篇文章主要介紹了JS實(shí)現(xiàn)控制表格內(nèi)指定單元格內(nèi)容對(duì)齊的方法,涉及javascript操作表格單元格內(nèi)容樣式的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • 如何通過JavaScript來實(shí)現(xiàn)頁面間數(shù)據(jù)傳遞

    如何通過JavaScript來實(shí)現(xiàn)頁面間數(shù)據(jù)傳遞

    這篇文章主要給大家介紹了關(guān)于如何通過JavaScript來實(shí)現(xiàn)頁面間數(shù)據(jù)傳遞的相關(guān)資料,在前端開發(fā)中我們常常需要從一個(gè)跳到另一個(gè)頁面,并且將當(dāng)前頁面的數(shù)據(jù)傳遞過去,需要的朋友可以參考下
    2023-11-11
  • js事件監(jiān)聽器用法實(shí)例詳解

    js事件監(jiān)聽器用法實(shí)例詳解

    這篇文章主要介紹了js事件監(jiān)聽器用法,以實(shí)例形式較為詳細(xì)的分析了javascript事件監(jiān)聽器使用注意事項(xiàng)與相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • ios中視頻的最后一楨問題解決

    ios中視頻的最后一楨問題解決

    這篇文章主要給大家介紹了關(guān)于ios中視頻的最后一楨問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • javascript簡單實(shí)現(xiàn)滑動(dòng)菜單效果的方法

    javascript簡單實(shí)現(xiàn)滑動(dòng)菜單效果的方法

    這篇文章主要介紹了javascript簡單實(shí)現(xiàn)滑動(dòng)菜單效果的方法,實(shí)例分析了javascript通過對(duì)頁面元素與相關(guān)屬性的操作實(shí)現(xiàn)滑動(dòng)菜單效果的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07

最新評(píng)論

昌黎县| 天门市| 乌苏市| 垣曲县| 阳朔县| 视频| 吴江市| 巴中市| 库尔勒市| 巨鹿县| 盐城市| 兰溪市| 石狮市| 阿拉善左旗| 棋牌| 兴仁县| 洪湖市| 龙山县| 普兰店市| 呼伦贝尔市| 泰兴市| 华阴市| 民权县| 东台市| 清涧县| 元朗区| 肥西县| 辛集市| 偃师市| 徐汇区| 顺义区| 宽城| 宜丰县| 广宗县| 涟水县| 儋州市| 普洱| 海南省| 同仁县| 苏尼特左旗| 东方市|