当前位置: 首页 > 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

相关文章:

  • QVariant详解与属性访问
  • Taro 状态管理全面指南:从本地状态到全局方案
  • Gartner《AI-Driven Methods for Cost-Efficiency》学习心得
  • 从零开发ComfyUI插件:打造你的AI绘画专属工具
  • 从事登高架设作业需要注意哪些安全事项?
  • 池化资源共享 - 华为OD机试真题(JavaScript题解)
  • 组件之间的双向绑定:v-model
  • Happy-LLM-Task04 :2.2 Encoder-Decoder
  • RA4M2开发IOT(0)----安装e² studio
  • 【Docker基础】Docker镜像管理:docker pull详解
  • 【格与代数系统】偏序关系、偏序集与全序集
  • 【软考高级系统架构论文】论企业应用系统的数据持久层架构设计
  • 面试题-函数类型的重载是啥意思
  • Linux——JSON
  • Hightec生成tricore lib及lib的使用方法
  • 自动化立体仓库堆垛机控制系统STEP7 FC3功能块 I/O映射
  • 为车辆提供路径规划解决方案:技术演进、挑战与未来蓝图
  • 数据结构转换与离散点生成
  • c++11标准(5)——并发库(互斥锁)
  • 偏微分方程通解求解2
  • 做网站好找工作吗/广州seo诊断
  • 怎么弄百度网站/找平台推广
  • 2021最火电商平台/关键词优化软件
  • 广州网站建设88/销售策略和营销策略
  • 网站开发步骤说明书是什么/建网站软件工具
  • 网站的百度地图怎么做的/厦门seo推广外包