Published on

TypeScript 交叉类型

Authors
  • avatar
    Name
    叫我小N就好啦
    GitHub
    @MinorN

TypeScript——交叉类型

什么是交叉类型

就是交集!

type A = string & number // A 就是 never ,因为string和number没有交集

什么时候用交叉类型

一般用于描述对象

type Left = { left: string }
type Right = { right: string }
type C = Left & Right // 表示既有left,又有right

接口也能求交集

interface Color {
  color: string
}
interface Circle {
  radius: number
}
type ColorCircle = Color & Circle

还可以模拟继承

type Person = {
  name: string
  age: number
}
type User = Person & {
  id: number
}
const my: User = {
  name: 'MinorN',
  age: 18,
  id: 1,
}
// Question: 如果有重复的属性,且冲突,怎么办?
// Eg:
type Person = {
  name: string
  age: number
  id: string
}
type User = Person & {
  id: number
} // 这时候User类型不报错
const my: User = {
  name: 'MinorN',
  age: 18,
  id: 1, // 报错,此时id被TS理解成never类型
}
// 来看看 interface 怎么做
interface Person {
  name: string
  age: number
  id: string
}
interface User extends Person {
  id: number
} // 这时候User类型报错,这也是 type 和 interface 的区别