类型与集合
- number、string、bool、undefined、null、object等类型表示集合
- 具体的值表示集合里的元素
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 的子集