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

面试题-合并类型

你的理解存在一些偏差。在 TypeScript 中,联合类型(A | B 和 交叉类型(A & B 的行为是不同的:

正确分析

1. 联合类型(A | B

表示值可以是 A 或 B,但不需要同时满足两者。

type A = { name: string };
type B = { age: number; sex: string };
type C = A | B; // C 可以是 A 或 B// 合法示例
const c1: C = { name: "Alice" };      // 符合 A
const c2: C = { age: 25, sex: "male" }; // 符合 B(注意:你之前的例子缺少 sex)// 错误示例
const invalid: C = { age: 25 }; // 错误!B 要求必须有 sex 属性
2. 交叉类型(A & B

表示值必须 同时满足 A 和 B 的所有属性。

type C = A & B; // C 必须同时有 name、age 和 sex// 合法示例
const c3: C = { name: "Bob", age: 30, sex: "male" };// 错误示例
const invalid: C = { name: "Bob", age: 30 }; // 缺少 sex 属性

你的代码问题

你定义的 C 是 A | B,但示例中的 c2 和 c3 存在问题:

  • c2{ age: 25 } 不满足 B 的要求(B 需要 age  sex)。
  • c3{ name: "Bob", age: 30, sex: "male" } 在 A | B 中是合法的,但这是因为它恰好同时满足 A 和 B,而不是因为联合类型允许合并属性。

总结

类型要求示例
**`AB`**只需符合 A  B{ name: "Alice" } 或 { age: 25, sex: "male" }
A & B必须同时符合 A  B{ name: "Bob", age: 30, sex: "male" }

修正后的代码

type A = { name: string };
type B = { age: number; sex: string };// C 是 A 或 B
type C = A | B; // 合法示例
const c1: C = { name: "Alice" };          // 符合 A
const c2: C = { age: 25, sex: "male" };   // 符合 B// 错误示例(之前的问题)
// const c2: C = { age: 25 }; // 错误:缺少 sex
// const c3: C = { name: "Bob", age: 30 }; // 错误:如果是 B 则缺少 sex

如果需要合并属性,应该使用 交叉类型(A & B

http://www.lqws.cn/news/474103.html

相关文章:

  • Flink流水线+Gravitino+Paimon集成
  • 【JAVA】数组的使用
  • CSP-S 模拟赛一总结(T1、T2)
  • 网络安全基础:从CIA三元组到密钥交换与消息认证
  • C++构造和折构函数详解,超详细!
  • 面试题-在ts中有两个类型,一个是a,一个是b,这两个联合起来就是c,如何实现联合
  • C++指针(三)
  • Spring Boot的智能装配引擎--自动配置
  • MySQL存储引擎与架构
  • Centos7.6内网离线安装Docker环境和Portainer-博客
  • 《SwanLab:开启AI开发新视界》
  • 基于YOLO的智能车辆检测与记录系统
  • 【格与代数系统】偏序关系、偏序集与全序集
  • UVA489刽子手游戏
  • QT vscode cmake 编译 undefined reference to `vtable for 问题解决
  • IEC61850 一致性测试中的 UCA 测试
  • Python文件管理利器之Shutil库详解
  • 嵌入式开发之嵌入式系统硬件架构设计时,如何选择合适的微处理器/微控制器?
  • 响应式数据的判断:Vue3中的方法
  • 《Effective Python》第九章 并发与并行——总结(基于物流订单处理系统)
  • 获取 DOM 与 nextTick:Vue 中的 DOM 操作
  • 数据结构——函数填空题
  • 简单通过SenseVoice给自己配置一个语音转文字服务
  • C++多态
  • 【Docker基础】Docker镜像管理:docker pull详解
  • flutter环境变量记录
  • Spring Cloud OpenFeign:微服务调用的终极利器
  • 面试题-定义一个函数入参数是any类型,返回值是string类型,如何写出这个函数,代码示例
  • 从C++编程入手设计模式——观察者模式
  • Matplotlib绘制矩阵图,plt.matshow/imshow 与 ax.pcolor(pcolormesh)方法的使用