国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

張家港企業(yè)做網(wǎng)站seo網(wǎng)站運(yùn)營

張家港企業(yè)做網(wǎng)站,seo網(wǎng)站運(yùn)營,wordpress網(wǎng)站數(shù)據(jù),dreamweaver手機(jī)版安卓概述 在 TS 中,infer 是一個(gè)高級(jí)類型操作,特別是條件類型和映射類型中非常有用的關(guān)鍵字它在泛型中使用也會(huì)是一個(gè)強(qiáng)大工具,增強(qiáng)了類型推斷的能力,讓開發(fā)者更靈活地處理和操作類型它允許在泛型類型推導(dǎo)過程中捕獲一個(gè)具體的類型&a…

概述

  • 在 TS 中,infer 是一個(gè)高級(jí)類型操作,特別是條件類型和映射類型中非常有用的關(guān)鍵字
  • 它在泛型中使用也會(huì)是一個(gè)強(qiáng)大工具,增強(qiáng)了類型推斷的能力,讓開發(fā)者更靈活地處理和操作類型
  • 它允許在泛型類型推導(dǎo)過程中捕獲一個(gè)具體的類型,這對(duì)于編寫復(fù)雜的類型轉(zhuǎn)換和映射操作特別有用
  • infer 的定義
    • infer 表示在 extends 條件語句中以占位符出現(xiàn)的用來修飾數(shù)據(jù)類型的關(guān)鍵字
    • 被修飾的數(shù)據(jù)類型等到使用時(shí)才能被推斷出來
  • infer 占位符式的關(guān)鍵字出現(xiàn)的位置
    • infer 出現(xiàn)在 extends 條件語句后的函數(shù)類型的參數(shù)類型位置上
    • infer 出現(xiàn)在 extends 條件語句后的函數(shù)類型的返回值類型上
    • infer 出現(xiàn)在類型的泛型具體化類型上

實(shí)現(xiàn)

1 )infer 出現(xiàn)在 extends 條件語句后的函數(shù)類型的參數(shù)類型位置上

// 定義了一個(gè)接口Customer,它描述了一個(gè)具有name(字符串類型)和moneyPaid(數(shù)字類型)屬性的對(duì)象
interface Customer {name: stringmoneyPaid: number
}// 定義了一個(gè)函數(shù)類型,接受一個(gè)Customer類型的參數(shù)并返回一個(gè)字符串
type custFuncType = (cust: Customer) => string// 定義了一個(gè)泛型類型inferType<T>,這是理解的重點(diǎn)。這是一個(gè)條件類型,它使用了infer關(guān)鍵字
type inferType<T> = T extends (params: infer P) => any ? P : T// 定義了inferResultType類型別名,它是通過將前面定義的custFuncType類型作為參數(shù)傳遞給inferType得到的
type inferResultType = inferType<custFuncType>
  • 分析一下這行代碼:type inferType<T> = T extends (params: infer P) => any ? P : T
    • T extends (params: infer P) => any
      • 這部分是一個(gè)類型測(cè)試,檢查T是否可以賦值給一個(gè)函數(shù)類型
      • 該函數(shù)接受一個(gè)參數(shù)(我們稱之為params)
      • infer P關(guān)鍵字在這里用于聲明一個(gè)新的類型變量P,用來捕獲T中函數(shù)參數(shù)的實(shí)際類型
    • ? P
      • 如果上面的測(cè)試為真(即T確實(shí)是一個(gè)函數(shù)類型)
      • 那么整個(gè)條件類型的結(jié)果就是捕獲的參數(shù)類型P
    • : T
      • 如果上面的測(cè)試為假(即T不是函數(shù)類型或不匹配)
      • 則條件類型的結(jié)果就是T本身,不做任何改變
  • 最后一行代碼 type inferResultType = inferType<custFuncType>
    • custFuncType是一個(gè)接受Customer類型參數(shù)的函數(shù),所以infer P會(huì)捕獲到這個(gè)參數(shù)類型
    • 因此,inferResultType 實(shí)際上就是Customer類型

2 ) infer 出現(xiàn)在 extends 條件語句后的函數(shù)類型的返回值類型上

// 定義了一個(gè)接口Customer,它描述了一個(gè)具有name(字符串類型)和moneyPaid(數(shù)字類型)屬性的對(duì)象
interface Customer {custname: stringmoneyPaid: number
}
// 這個(gè)類型定義了一個(gè)函數(shù),該函數(shù)接受一個(gè)Customer類型的參數(shù)并返回一個(gè)字符串
type custFuncType = (cust: Customer) => string
type inferType<T> = T extends (params: any) => infer P ? P : T
type inferResultType = inferType<custFuncType>
  • 核心在這里, type inferType<T> = T extends (params: any) => infer P ? P : T
    • 上面,inferType 的 infer 在返回值的位置上
    • infer P 表示“推斷出一個(gè)類型 P”,這個(gè) P 是函數(shù)的返回類型
    • 它根據(jù) extends 的檢查結(jié)果來選擇不同的類型
    • 如果 T 是一個(gè)符合 (params: any) => … 形式的函數(shù)類型
    • 那么表達(dá)式的結(jié)果是 P(即函數(shù)的返回類型)
    • 否則,表達(dá)式的結(jié)果是 T 本身
  • 最后,type inferResultType = inferType<custFuncType>
    • 由于,custFuncType 是一個(gè)返回值為 string 的函數(shù)類型
    • 符合,inferType 內(nèi)部的三元推導(dǎo)的條件,因?yàn)?返回值是 P, 而在這里P又是 string 類型
    • 所以,type inferResultType 就是 string 類型

3 ) infer 出現(xiàn)在類型的泛型具體化類型上

class Subject {constructor(public id: number, public name: string) {}
}const chineseSubject = new Subject(100, "語文");
const mathSubject = new Subject(101, "數(shù)學(xué)");type ElementOfSet<T> = T extends Set<infer E> ? E : never;const subjectsSet = new Set<Subject>([chineseSubject, mathSubject]);type SubjectType = ElementOfSet<typeof subjectsSet>;// 使用推斷出的SubjectType類型
function printSubject(subject: SubjectType) {console.log(`學(xué)科ID: ${subject.id}, 學(xué)科名稱: ${subject.name}`);
}printSubject(chineseSubject);
  • 核心代碼在這里:type ElementOfSet<T> = T extends Set<infer E> ? E : never;
    • 如果 參數(shù) T 屬于 Set 類型,則 ElementOfSet 則是 E 的類型
    • 這里 Set<infer E> 使用 infer E 推導(dǎo)出 E的類型,如果符合 extends 條件,則返回E,否則返回 never
  • const subjectsSet = new Set<Subject>([chineseSubject, mathSubject]);
    • 這里 subjectsSet 是一個(gè) Set 類型,而且單個(gè)元素是 Subject 類型
  • type SubjectType = ElementOfSet<typeof subjectsSet>;
    • ElementOfSet<typeof subjectsSet> 這里符合內(nèi)部條件,所以,它最終是一個(gè) Subject 類型
  • 所以,在最后,printSubject 中完美運(yùn)行

總結(jié)

  • infer關(guān)鍵字在TypeScript中為泛型編程提供了一個(gè)強(qiáng)大的工具
  • 它不僅增強(qiáng)了類型系統(tǒng)的表達(dá)能力,還使開發(fā)者能夠編寫出更加靈活和精確的類型定義
  • 通過掌握infer的使用,你能夠在處理復(fù)雜類型邏輯和類型轉(zhuǎn)換時(shí)更加游刃有余
  • 提升代碼的類型安全性和可維護(hù)性
http://m.aloenet.com.cn/news/35746.html

相關(guān)文章:

  • 保定網(wǎng)站建設(shè)方法能打開各種網(wǎng)站的瀏覽器下載
  • 軟件開發(fā)過程五個(gè)步驟網(wǎng)站seo優(yōu)化總結(jié)
  • p2p網(wǎng)站建設(shè)百度seo發(fā)包工具
  • 豬八戒做網(wǎng)站靠譜嗎seo技術(shù)培訓(xùn)寧波
  • 網(wǎng)站的音樂鏈接怎么做現(xiàn)在有什么技能培訓(xùn)班
  • 微信如何做積分商城網(wǎng)站煙臺(tái)seo
  • 中國男女直接做的視頻網(wǎng)站百度云盤
  • 動(dòng)漫做3d游戲下載網(wǎng)站河南seo關(guān)鍵詞排名優(yōu)化
  • 怎么自己制作網(wǎng)站網(wǎng)絡(luò)推廣優(yōu)化招聘
  • app開發(fā)定制開發(fā)合肥seo網(wǎng)站排名
  • 專業(yè)網(wǎng)站建設(shè)webmeng網(wǎng)絡(luò)營銷工具和方法
  • 上海微信小程序網(wǎng)站建設(shè)活動(dòng)策劃方案詳細(xì)模板
  • 電子商城網(wǎng)站建設(shè)農(nóng)產(chǎn)品推廣方案
  • 杭州開發(fā)網(wǎng)站收錄網(wǎng)站
  • 坪山住房和建設(shè)局網(wǎng)站推銷
  • AAP網(wǎng)站開發(fā)需要多少錢微指數(shù)
  • 西寧做網(wǎng)站的好公司北京seo優(yōu)化技術(shù)
  • 站群網(wǎng)絡(luò)促銷的方法有哪些
  • 成都網(wǎng)站建設(shè)前幾公司關(guān)鍵詞搜索愛站網(wǎng)
  • 自己做soho需要做網(wǎng)站嗎云盤網(wǎng)頁版登錄
  • 網(wǎng)絡(luò)推廣主要工作內(nèi)容網(wǎng)站關(guān)鍵詞排名優(yōu)化軟件
  • 網(wǎng)站測(cè)試問題提交模板百度搜索引擎地址
  • 金融做市場(chǎng)廣告掛哪些網(wǎng)站seo百度網(wǎng)站排名研究中心關(guān)鍵詞首頁優(yōu)化
  • dedecms做網(wǎng)站有多快網(wǎng)絡(luò)營銷推廣專員
  • 太原推廣型網(wǎng)站制作汕頭seo快速排名
  • 房山網(wǎng)站建設(shè)網(wǎng)絡(luò)seo哈爾濱
  • 政府網(wǎng)站建設(shè)分析專注于seo顧問
  • 如何進(jìn)行網(wǎng)站維護(hù)seo云優(yōu)化如何
  • 動(dòng)態(tài)網(wǎng)站設(shè)計(jì)與開發(fā)心得體會(huì)貴陽關(guān)鍵詞優(yōu)化平臺(tái)
  • 齊諾網(wǎng)站建設(shè)成都私人做網(wǎng)站建設(shè)