首页 > 其他分享 >TypeScript中的交叉类型

TypeScript中的交叉类型

时间:2024-07-10 20:01:44浏览次数:12  
标签:TypeScript string 交叉 number allProps 类型 type 属性

        交叉类型:将多个类型合并为一个类型,使用&符号连接。

    type AProps = { a: string }
    type BProps = { b: number }

    type allProps = AProps & BProps

    const Info: allProps = {
        a: '小月月',
        b: 7
    }

        我们可以看到交叉类型是结合两个属性的属性值,那么我们现在有个问题,要是两个属性都有相同的属性值,那么此时总的类型会怎么样?

1、同名基础属性合并

    type AProps = { a: string, c: number }
    type BProps = { b: number, c: string }

    type allProps = AProps & BProps

    const Info: allProps = {
        a: '小月月',
        b: 7,
        c:  1, // error (property) c: never
        c:  'Domesy', // error (property) c: never
    }

        我们在ApropsBProps中同时加入c属性,并且c属性的类型不同,一个是number类型,另一个是string类型。现在结合为 allProps 后呢? 是不是c属性numberstring 类型都可以,还是其中的一种?

        然而在实际中, c 传入数字类型字符串类型都不行,我们看到报错,显示的是 c的类型是 never。这是因为对应 c属性而言是 string & number,然而这种属性明显是不存在的,所以c的属性是never。

2、同名非基础属性合并

    interface A { a: number }
    interface B { b: string }

    interface C {
        x: A
    }
    interface D {
        x: B
    }
    type allProps = C & D

    const Info: allProps = {
      x: {
        a: 7,
        b: '小月月'
      }
    }

    console.log(Info) // { x: { "a": 7, "b": "小月月" }}

        对于混入多个类型时,若存在相同的成员,且成员类型为非基本数据类型,那么是可以成功合。

    interface A { b: number }
    interface B { b: string }

    interface C {
        x: A
    }
    interface D {
        x: B
    }
    type allProps = C & D

    const Info: allProps = {
      x: {
        a: 7,
        b: '小月月' //此时b为never类型这里会报错
      }
    }

        如果 接口A 中的 也是 b,类型为number,就会跟同名基础属性合并一样,此时会报错!

标签:TypeScript,string,交叉,number,allProps,类型,type,属性
From: https://blog.csdn.net/gkx19898993699/article/details/140332167

相关文章

  • 深入解析SSL证书类型:选择适合你的解决方案
    目录引言什么是SSL证书SSL证书的工作原理SSL证书的基本类型域名验证(DV)证书组织验证(OV)证书扩展验证(EV)证书SSL证书的高级类型通配符(Wildcard)证书多域名(SAN/UCC)证书多域名通配符证书选择合适的SSL证书SSL证书的申请与安装SSL证书的管理与续费常见问题解答总结引言在互联......
  • 二、Python基本数据类型续篇
    字符串分割partition分割后可以拿到分割元素split分割后拿不到分割元素partition分割test9="abcdcfcg"v=test9.partition('c')#找到‘c’,然后进行分割,只能分割一次,也就是分成三段print(v)#>>>('ab','c','dcfg')v=test9.rpartition('c')......
  • 6-栈的链式存储类型
    #include<stdio.h>#include<stdlib.h>#include<stdbool.h>typedefintElemType;/*栈的链式存储类型*/typedefstructStackNode{/*数据域*/ElemTypedata;/*指针域*/structStackNode*next;}StackNode,*LinkStack;/*栈类型定义*//**......
  • 常见数据库类型和选取详解
    数据库是用于存储、检索和管理数据的系统。它们可以根据数据模型的不同被分类为不同类型。以下是一些常见的数据库类型和它们的选取详解:1.关系型数据库(RDBMS)特点:使用表格(tables)来组织数据。基于严格定义的数据模型和关系。支持SQL(结构化查询语言)进行数据查询和操作。常......
  • vue3中关于指定props的复杂ts类型
    如果要对props的数据进行指定类型,基本类型可以直接使用类型约束,复杂类型可以使用PropType进行约束interfaceItemInterface{title:stringcode:stringstatus:numbericon:string}constprops=defineProps({type:String,userId:String,currentItem......
  • 面试官:Java对象引用都有哪些类型?
    哈喽,大家好......
  • TypeScript的类型谓词与控制流分析
    目录ts封装类型判断的问题类型谓词TypeScript的“控制流分析”ts封装类型判断的问题在union.d.ts中全局声明一个DataTypedeclaretypeDataType=|"RegExp"|"Object"|"Array"|"Function"|"String"|"Boolean"|"......
  • healthd中充电类型的识别
    LA.UM.9.15.2.C3/system/core/healthd/BatteryMonitor.cpphealthd中chg是AC还是usb充电读取的是/sys/class/power_supply/usb/typeBatteryMonitor::PowerSupplyTypeBatteryMonitor::readPowerSupplyType(constString8&path){staticSysfsStringEnumMap<int>suppl......
  • 常见python数据类型及其相对应的函数
     列表:list是个有值序列,可以被修改的元素1.访问方式:foriinrange(len(ls)):   forcinls:fori,cinenumerate(ls):Python列表函数1cmp(list1,list2)比较两个列表的元素2len(list)列表元素个数3max(list)返回列表元素最大值4......
  • 67.SAP FICO-凭证类型学习
    目录SAP凭证类型凭证类型的作用- OBA7SAP默认的凭证类型更改FI相应事务代码默认凭证类型 -OBU1对FB50、60、70默认凭证类型的更改 - OBZO后勤货物移动默认凭证类型-OMBA发货凭证类型收货凭证类型自动移动凭证类型存货盘点凭证类型发票默认的凭证类型-OM......