TypeScript 联合类型与交叉类型详解

TypeScript 联合类型与交叉类型详解

1. 联合类型 (Union Types)

联合类型表示一个值可以是几种类型之一,使用 | 分隔类型。

基本语法 :

ini 复制代码
type ID = number | string;

特点 :

  • 只能访问所有类型共有的成员
  • 常用于函数参数接受多种类型
  • 需要类型守卫(type guards)来区分具体类型 示例 :
typescript 复制代码
function printId(id: number | string) {
  if (typeof id === 'string') {
    console.log(id.toUpperCase());
  } else {
    console.log(id.toFixed(2));
  }
}

2. 交叉类型 (Intersection Types)

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

基本语法 :

ini 复制代码
type Admin = Person & Permission;

特点 :

  • 包含所有类型的属性
  • 常用于混入(mixins)或扩展接口
  • 新类型具有所有类型的特性 示例 :
ini 复制代码
interface Person {
  name: string;
}

interface Permission {
  level: number;
}

type Admin = Person & Permission;

const admin: Admin = {
  name: 'Alice',
  level: 10
};

3. 联合类型与交叉类型的区别

| 特性 | 联合类型 ( | ) | 交叉类型 ( & ) | |------------|--------------|--------------| | 语义 | 或 | 与 | | 结果类型成员 | 共有成员 | 所有成员合并 | | 典型用途 | 多种可能输入 | 组合/扩展类型 |

4. 高级用法

联合类型与类型守卫 :

typescript 复制代码
function padLeft(value: string, padding: string | number) {
  if (typeof padding === 'number') {
    return Array(padding + 1).join(' ') + value;
  }
  return padding + value;
}

交叉类型与接口扩展 :

css 复制代码
interface A { a: number }
interface B { b: string }

type C = A & B;

const c: C = { a: 1, b: 'test' };

5. 实际应用场景

  • 联合类型 : API响应可能返回成功或错误对象
  • 交叉类型 : 组合多个React高阶组件属性
  • 组合使用 : 创建灵活的类型系统
ini 复制代码
type Result = Success | Error;
type ComponentProps = BaseProps & ThemeProps & StyleProps;
相关推荐
Lee川1 天前
优雅进化的JavaScript:从ES6+新特性看现代前端开发范式
javascript·面试
Lee川2 天前
从异步迷雾到优雅流程:JavaScript异步编程与内存管理的现代化之旅
javascript·面试
晴殇i2 天前
揭秘JavaScript中那些“不冒泡”的DOM事件
前端·javascript·面试
绝无仅有2 天前
Redis过期删除与内存淘汰策略详解
后端·面试·架构
绝无仅有2 天前
Redis大Key问题排查与解决方案全解析
后端·面试·架构
AAA梅狸猫2 天前
Looper.loop() 循环机制
面试
AAA梅狸猫2 天前
Handler基本概念
面试
Wect2 天前
浏览器缓存机制
前端·面试·浏览器
掘金安东尼2 天前
Fun with TypeScript Generics:玩转 TS 泛型
前端·javascript·面试
掘金安东尼2 天前
Next.js 企业级落地
前端·javascript·面试