当前位置: 首页 > java >正文

TypeScript交叉类型、重复属性、类型断言和as const详解

1. 交叉类型(Intersection Types)

交叉类型使用 &运算符合并多个类型,新类型包含所有类型的属性:

interface Colorful {color: string;
}
interface Circle {radius: number;
}
type ColorfulCircle = Colorful & Circle; // 合并类型const cc: ColorfulCircle = {color: "red",   // 必须包含Colorful的属性radius: 42      // 必须包含Circle的属性
};

特性:

  • 相当于逻辑"与"操作

  • 适用于对象、函数等复杂类型组合

  • 与联合类型|互补(联合类型是逻辑"或")

2. 重复属性处理

当交叉类型中出现同名属性时:

type A = { x: number };
type B = { x: string };
type C = A & B;// 此时C中的x成为never类型:
// x: number & string → never

处理规则

  1. 基本类型冲突 → 变成never类型(如string & number

  2. 函数类型 → 函数重载(按声明顺序合并)

  3. 对象类型 → 递归合并嵌套属性

  4. 字面量类型 → 取交集(如'a' & ('a'|'b') → 'a'

3. 类型断言(Type Assertion)

手动指定值的类型,覆盖TS的类型推断:

// 尖括号语法
let value: any = "hello";
let len1: number = (<string>value).length;// as语法(推荐,避免JSX歧义)
let len2: number = (value as string).length;// 双重断言(解决类型不兼容)
const element = document.getElementById("root") as unknown as HTMLElement;

使用场景

  • DOM操作(如document.getElementById

  • 处理any类型的值

  • 类型转换(需确保运行时兼容)

4. as const断言

将值锁定为不可变的字面量类型:

// 普通数组 → 类型为number[]
let arr = [1, 2, 3]; // as const 数组 → 类型为readonly [1, 2, 3]
let constArr = [1, 2, 3] as const; // 对象属性变为只读字面量
const obj = {name: "Alice",age: 30
} as const;obj.age = 31; // 错误!Cannot assign to 'age' 

核心特性

  • 所有属性变为readonly

  • 数字/字符串等变为字面量类型

  • 数组变为元组(tuple)类型

  • 冻结对象结构(无法增删改属性)

总结对比

特性交叉类型 (&)类型断言 (as)as const
作用类型合并覆盖类型推断锁定字面量类型
可变性保持原始可变性保持原始可变性所有属性变readonly
典型场景组合多个接口DOM操作/类型转换配置对象/常量定义
类型变化创建新类型不改变运行时值缩小类型范围

注意:交叉类型与接口继承(extends)类似,但前者更灵活支持类型组合,后者需要显式声明关系。类型断言不是类型转换,仅在编译阶段起作用。

http://www.xdnf.cn/news/19611.html

相关文章:

  • 基于Hadoop的可视化城市宜居指数分析(代码+数据库+LW)
  • Masonry入门学习
  • 精确率、召回率、漏检率、误判率
  • Git安装教程
  • AI瘦身狂魔!微软推出原生1-bit大模型,性能不减,内存仅需同行零头!
  • 基于大数据的京东手机销售数据 可视化分析设计与开发03446原创的定制程序,java、PHP、python、C#小程序、文案全套、毕设程序定制、成品等
  • 华清远见25072班I/O学习day2
  • 继承体系中的隐藏机制解析(继承中的作用域)
  • MongoDB主从切换实战:如何让指定从库“精准”升级为主库?保姆级教程!
  • 基于单片机智能家居语音控制系统
  • 如何在VS Code远程连接Xshell使用
  • Linux - Redis离线安装(安装包的方式安装Redis)
  • 从Redisson分布式锁看锁的设计思路
  • IPC 进程间通信 interprocess communicate
  • 企业微信AI落地:如何选择企业微信服务商?
  • Axios拦截器:前端通信的交通警察[特殊字符]
  • 搭载AX650N高能效比智能视觉芯片——AX2050系列边缘计算盒,可应用在智慧安防交通仓储教育,人脸识别,明厨亮灶,安全生产,智能机器人等
  • table表格字段明细展示
  • 不透明指针
  • 【iOS】折叠cell
  • 《青衣剑客 · Claude》连载
  • 总线矩阵的原理
  • 如何将多个Excel报表合并为一个汇总文件?
  • N32G43x Bootloader 中 ENV 区的管理与实现
  • 前缀和(优化算法)
  • ClickHouse常见问题——ClickHouseKeeper配置listen_host后不生效
  • 面试 TOP101 动态规划专题题解汇总Java版(BM62 —— BM82)
  • 二、SVN基础命令速查表
  • leetcode 1792. 最大平均通过率 中等
  • 通过 select into outfile / load data infile 进行数据导入导出学习笔记