TS与集合论

类型与集合

在这里插入图片描述

  1. number、string、bool、undefined、null、object等类型表示集合
  2. 具体的值表示集合里的元素
interface A {
  x: number
}
interface B {
  x: number
  y: number
}
const b: B = {
  x: 1,
  y: 2,
}
const a: A = b // ok

为什么B类型能赋值给A类型(即B是A的子集)?

  • A 表示所有拥有属性 x: number 的对象的集合
  • B中有x: number和y: number更加具体,故B是A的子集(B能赋值给A)

基础类型的运算

type A = 1 | 2
type B = 2 | 3

// A B 交集
type C = A & B // C = 2
// A B 并集
type D = A | B // D = 1 | 2 | 3

// A number 交集
type E = A & number // E = A = 1 | 2
// A number 并集
type F = A | number // F = number

// 空集 never
type G = number & string // G = never
// 全集 unknown
type H = number | unknown // H = unknown

对象类型的运算

交叉类型 Intersection 是对象集合A 和B的交集,是属性集合的并集

interface A {
  x: number
  y: number
}
interface B {
  y: number
  z: number
}

// 交叉类型
type Intersection = B & A

const obj1: Intersection = {
  x: 1,
  y: 2,
  z: 3,
}

obj1.x // ok
obj1.y // ok
obj1.z // ok

交叉类型 Union 是对象集合A 和B的并集,是属性集合的交集

interface A {
  x: number
  y: number
}
interface B {
  y: number
  z: number
}

// 交叉类型
type Union = B | A

const obj1: Union = {
  x: 1,
  y: 2,
  z: 3,
}

obj1.x // error
obj1.y // ok
obj1.z // error

extends

A extends B 表示: A 为 B 的子集

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值