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

TypeScript中的交叉類型和聯(lián)合類型示例講解

 更新時間:2022年12月31日 10:33:20   作者:不叫貓先生  
交叉類型簡單來說就是通過&符號將多個類型進行合并成一個類型,然后用type來聲明新生成的類型,聯(lián)合類型和交叉類型比較相似,聯(lián)合類型通過|符號連接多個類型從而生成新的類型,本文就這兩個類型結(jié)合示例代碼詳細(xì)講解,感興趣的朋友跟隨小編一起學(xué)習(xí)吧

在這里插入圖片描述

交叉類型(Intersection types)

什么事交叉類型呢?簡單來說就是通過&符號將多個類型進行合并成一個類型,然后用type來聲明新生成的類型。這里我舉個例子,具體如下:

interface ClassA{
    name:string;
    age:number
}
interface ClassB{
    name:string;
    phone:number;
}

將接口ClassA和接口ClassB通過&進行合并創(chuàng)建一個新的接口類型Class

type Class = ClassA & ClassB
let info:Class = {
    name:'zhagsan',
    age:18,
    phone:1573875555
}

要點

任何類型都能通過&合并成新的類型嗎?

  • 這肯定是不行的,原子類型進行合并是沒有任何意義,因為它們合并后的類型是never,比如string&number,這肯定是錯誤的,因為不可能有既滿足字符串又滿足數(shù)字類型。

合并的接口類型中具有同名屬性,該怎么處理?

  • 這里分兩種情況,如果同名屬性的類型相同則合并后還是原本類型,如果類型不同,則合并后類型為never
interface X{
	q:number,
	w:string
}
interface Y{
	q:boolean,
	r:string,
}
type XY = X&Y

編輯器中直接就給我們了提示,如下圖所示:

在這里插入圖片描述

再舉一個稍微復(fù)雜點的例子

interface A {
    inner: D;
}
interface B {
    inner: E;
}
interface C {
    inner: F;
}

interface D {
    d: boolean;
}
interface E {
    e: string;
}
interface F {
    f: number;
}
type ABC = A & B & C;
let abc: ABC = {
    inner: {
        d: false,
        e: 'className',
        f: 5
    }
};

聯(lián)合類型(Union types)

聯(lián)合類型和交叉類型比較相似,聯(lián)合類型通過|符號連接多個類型從而生成新的類型。它主要是取多個類型的交集,即多個類型共有的類型才是聯(lián)合類型最終的類型。聯(lián)合類型可以是多個類型其中一個,可做選擇,比如:string | number,它的取值可以是string類型也可以是number類型。
舉幾個例子,如下所示:

  • 聲明變量的時候設(shè)置變量類型
let a:string|number|boolean;
a = 's';
a = 1;
a= false;
  • 多個接口類型進行聯(lián)合
interface X{
	q:number,
	w:string,
	r:string
}
interface Y{
	q:number
	r:string,
}
type XY = X | Y
let value:XY = {
    q:1,
    r:'r'
}
  • 函數(shù)接口類型進行聯(lián)合
interface X{
	x:()=>string;
	y:()=>Number;
}
interface Y{
	x:()=>string;
}
type XY = X|Y;
function func1():XY{
//此處不進行類型斷言為XY在編輯器中會報類型錯誤
  return {} as XY

}
let testFunc = func1();
testFunc.x();
testFunc.y(); //Error:類型“XY”上不存在屬性“y”,類型“Y”上不存在屬性“y”。

另外我們還要注意,testFunc.x()還會報類型錯誤,我們需要用類型守衛(wèi)來區(qū)分不同類型。這里我們用in操作符來判斷

if('x' in testFunc) testFunc.x()

類型縮減

  • 當(dāng)字面量類型和原始類型進行聯(lián)合,那么就會造成類型縮減。
type A = 'a' | string;  //string類型
type B = false | boolean; //bolean 類型
type C = 1 | number; //number類型
  • 當(dāng)然枚舉也會有類型縮減現(xiàn)象,如下:
enum Class{
   A,
   B
 }
type C = Class.A | Class;//Class類型

我們發(fā)現(xiàn):TS會把字面量類型和枚舉成員類型給縮減掉,只剩下原始類型和枚舉類型
??思考一個問題:當(dāng)接口類型進行聯(lián)合,接口中同名屬性的類型不同,該怎么進行縮減呢?比如下面的例子,看到這里的話,如果你知道答案寫在評論區(qū)。

interface A{
   name:string
}
interface B{
   name:string | number
   [property:string]:any
}
type AB = A|B

到此這篇關(guān)于TypeScript交叉類型和聯(lián)合類型的文章就介紹到這了,更多相關(guān)TS交叉類型與聯(lián)合類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 前端中骨架屏的三種運用方式介紹

    前端中骨架屏的三種運用方式介紹

    這篇文章主要為大家詳細(xì)介紹了前端中骨架屏的三種運用方式,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-05-05
  • JScript面向事件驅(qū)動的編程

    JScript面向事件驅(qū)動的編程

    JScript面向事件驅(qū)動的編程...
    2007-01-01
  • JavaScript設(shè)計模式之裝飾者模式定義與應(yīng)用示例

    JavaScript設(shè)計模式之裝飾者模式定義與應(yīng)用示例

    這篇文章主要介紹了JavaScript設(shè)計模式之裝飾者模式定義與應(yīng)用,結(jié)合實例形式分析了JavaScript裝飾者模式的原理、定義及應(yīng)用方法,需要的朋友可以參考下
    2018-07-07
  • 微信小程序調(diào)用PHP后臺接口 解析純html文本

    微信小程序調(diào)用PHP后臺接口 解析純html文本

    這篇文章主要為大家詳細(xì)介紹了微信小程序調(diào)用PHP后臺接口,解析純html文本的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • JavaScript中的繼承之類繼承

    JavaScript中的繼承之類繼承

    在JS中繼承是一個非常復(fù)雜的話題,比其他任何面向?qū)ο笳Z言中的繼承都復(fù)雜得多。接下來通過本文給大家介紹JavaScript中的繼承之類繼承,感興趣的朋友一起看看吧
    2016-05-05
  • js獲取URL的參數(shù)的方法(getQueryString)示例

    js獲取URL的參數(shù)的方法(getQueryString)示例

    getQueryString方法默認(rèn)返回的是 string如果是int類型,則JS使用的時候,要進行轉(zhuǎn)換一下,下面有個不錯的示例,大家可以參考下
    2013-09-09
  • 微信小程序?qū)崿F(xiàn)2048小游戲的詳細(xì)過程

    微信小程序?qū)崿F(xiàn)2048小游戲的詳細(xì)過程

    這篇文章主要給大家介紹了關(guān)于微信小程序?qū)崿F(xiàn)2048小游戲的相關(guān)資料,文中將實現(xiàn)的代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用微信小程序具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-09-09
  • 前端打斷點debugger使用流程詳細(xì)教程

    前端打斷點debugger使用流程詳細(xì)教程

    這篇文章主要介紹了前端打斷點debugger使用的相關(guān)資料,包括如何設(shè)置斷點、如何使用調(diào)試按鈕以及如何查看變量,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • 微信小程序?qū)崿F(xiàn)拼圖游戲

    微信小程序?qū)崿F(xiàn)拼圖游戲

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)拼圖游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • javascript刪除元素節(jié)點removeChild()用法實例

    javascript刪除元素節(jié)點removeChild()用法實例

    這篇文章主要介紹了javascript刪除元素節(jié)點removeChild()用法,實例分析了removeChild()方法移除節(jié)點的使用技巧,需要的朋友可以參考下
    2015-05-05

最新評論

珠海市| 全南县| 汕头市| 永靖县| 海伦市| 泾源县| 历史| 全椒县| 巨野县| 苍溪县| 绥中县| 新营市| 阿鲁科尔沁旗| 革吉县| 资溪县| 太和县| 苗栗市| 乌什县| 张家港市| 新郑市| 如东县| 余庆县| 双峰县| 福建省| 沿河| 嘉兴市| 金昌市| 大连市| 英吉沙县| 灵山县| 馆陶县| 武平县| 台州市| 板桥市| 南皮县| 潞城市| 锦屏县| 秭归县| 峨山| 黔西县| 侯马市|