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

TypeScript交叉運(yùn)算的算法示例解析

 更新時(shí)間:2023年08月04日 11:10:47   作者:Qing  
這篇文章主要為大家介紹了TypeScript交叉運(yùn)算的算法示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引文

相信只要接觸過ts的同學(xué)就有了解交叉類型這兩個(gè)概念,以前我對交叉類型感到非常疑惑,明明叫交叉類型,為何對對象類型使用了交叉運(yùn)算后類型反而會(huì)進(jìn)行屬性的合并?不知道大家有沒有和我一樣的困惑。這篇文章我會(huì)分享我最近感悟到的用不同視角來解釋出現(xiàn)上述問題的原因,如有錯(cuò)誤,懇請指正。

交叉運(yùn)算

在ts中,使用&這個(gè)符號來對兩個(gè)類型進(jìn)行交叉運(yùn)算,下面舉幾個(gè)小例子來開始講解。

例一

type A = number & string    // never

例二

type A = 1 & number                // 1
type B = "hello" & string          // "hello"

例三

type A1 = {a: number}
type A2 = {aa: string}

這里的例子正是我在引文中提到的情況,按照交叉這個(gè)字面意思來理解,{a: number}{aa: string}兩個(gè)好像也沒有什么交集,按照例一的思路來思考,結(jié)果應(yīng)該是never,為何結(jié)果是{a: number, aa: string}

首先來思考一個(gè)問題,假設(shè)有這么幾個(gè)對象:

{a: 1, b: 2}

{aa: "11", bb: "22"}

{a: 1, b: 2, aa: "11", bb: "22"}

這幾個(gè)對象分別賦值給類型為A1、A2、A的變量,哪個(gè)類型的變量在被賦值的時(shí)候有比較大的可能會(huì)出現(xiàn)錯(cuò)誤?

相信大家能夠很容易的猜到答案,那就是上面的這三個(gè)對象在給類型為A的變量賦值的時(shí)候前兩個(gè)對象都會(huì)報(bào)錯(cuò),只有最后一個(gè)對象是符合類型要求的。

上述中的A1、A2類型,A1類型的變量只需要值中有屬性名為a,屬性值類型為number的屬性即可滿足,而A2類型的變量只需要值中有屬性名為aa,屬性值類型為string的屬性即可滿足,而A類型的變量對值的要求是必須要同時(shí)有a和aa這兩個(gè)屬性。

那么符合A1、A2、A類型的值各有幾個(gè)?可以歸類下

符合A1類型的值:{a: 1, b: 2}、{a: 1, b: 2, aa: "11", bb: "22"}

符合A2類型的值:{aa: "11", bb: "22"}、{a: 1, b: 2, aa: "11", bb: "22"}

符合A類型的值:{a: 1, b: 2, aa: "11", bb: "22"}

可以看到在A1 & A2后得到的A類型,其值相對于A1和A2這兩個(gè)類型對應(yīng)的值的范圍是變小的,這也符合交叉運(yùn)算的結(jié)果趨勢。

我們對數(shù)學(xué)中的交并集運(yùn)算有著很深的印象,但是數(shù)學(xué)上交并集運(yùn)算作用的對象卻是具體的數(shù)值,如果把這種思想轉(zhuǎn)換到ts類型上來,其實(shí)不太合適,而是應(yīng)該把這種思想作用到ts類型所對應(yīng)的值上。

現(xiàn)在用這種思路去思考例一和例二,也是能夠走通的。

交叉運(yùn)算在處理對象類型的時(shí)候,交叉過后屬性反而增多,初看覺得不對勁,但轉(zhuǎn)換角度細(xì)想或許能發(fā)現(xiàn)其中的道理。

總結(jié)

交叉運(yùn)算會(huì)導(dǎo)致能夠賦值給結(jié)果類型的變量范圍變小,這個(gè)類型的限制也會(huì)變得更嚴(yán)格。

以上就是TypeScript交叉運(yùn)算示例解析的詳細(xì)內(nèi)容,更多關(guān)于TypeScript交叉運(yùn)算的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • type challenge刷題之(middle 部分)示例解析

    type challenge刷題之(middle 部分)示例解析

    這篇文章主要為大家介紹了type challenge刷題之(middle 部分)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • TypeScript?類型級別示例介紹

    TypeScript?類型級別示例介紹

    這篇文章主要為大家介紹了TypeScript?類型級別示例介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 開發(fā)typescript項(xiàng)目tsconfig.json配置及選項(xiàng)使用解析

    開發(fā)typescript項(xiàng)目tsconfig.json配置及選項(xiàng)使用解析

    這篇文章主要為大家介紹了tsconfig.json配置及選項(xiàng)使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • TypeScript Module Resolution解析過程

    TypeScript Module Resolution解析過程

    這篇文章主要為大家介紹了TypeScript Module Resolution解析過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • typescript 支持與本地調(diào)試配置詳解

    typescript 支持與本地調(diào)試配置詳解

    這篇文章主要為大家介紹了typescript 支持與本地調(diào)試配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Nest框架中集成使用Swagger示例說明

    Nest框架中集成使用Swagger示例說明

    這篇文章主要為大家介紹了Nest框架中集成使用Swagger的示例說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • TypeScript保姆級基礎(chǔ)教程

    TypeScript保姆級基礎(chǔ)教程

    這篇文章主要為大家介紹了TypeScript保姆級基礎(chǔ)教程示例詳解,主要為大家介紹了typescript的類型,函數(shù),對象,接口等基礎(chǔ)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-07-07
  • TypeScript?泛型接口具體使用實(shí)戰(zhàn)

    TypeScript?泛型接口具體使用實(shí)戰(zhàn)

    這篇文章主要為大家介紹了TypeScript?泛型接口具體使用實(shí)戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • type-challenge刷題(easy部分)示例詳解

    type-challenge刷題(easy部分)示例詳解

    這篇文章主要為大家介紹了type-challenge刷題(easy部分)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • TypeScript之Generics泛型類型學(xué)習(xí)

    TypeScript之Generics泛型類型學(xué)習(xí)

    這篇文章主要為大家介紹了TypeScript之Generics泛型類型學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07

最新評論

德阳市| 靖西县| 乃东县| 淮北市| 依安县| 大化| 曲周县| 个旧市| 凤山市| 万全县| 平定县| 昂仁县| 武定县| 仪陇县| 湖北省| 阜南县| 靖州| 德保县| 崇礼县| 潜江市| 赣榆县| 泾源县| 沅陵县| 赤峰市| 雷山县| 新昌县| 资源县| 海伦市| 信宜市| 稷山县| 平顶山市| 临西县| 东方市| 博湖县| 厦门市| 松桃| 吉水县| 板桥市| 商丘市| 西丰县| 石门县|