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

第十节 高频代码题-类型推断题

⚙️ 一、基础类型推断题

​题目 1:变量初始化推断​

let a = 42;
const b = "hello";
let c = true;

​答案与解析​​:

  • a 被推断为 numberlet 声明允许重新赋值为同类型数字)
  • b 被推断为字面量类型 "hello"const 声明固定值,无类型拓宽)
  • c 被推断为 boolean(基础类型推断)

🧩 二、复合类型推断题

​题目 2:数组与对象推断​

const arr = [1, "text", null];
const obj = { name: "Alice", score: 95 
};

​答案与解析​​:

  • arr 被推断为 (number | string | null)[]
    • ​最佳公共类型​​:自动推导兼容所有元素的联合类型
  • obj 被推断为 { name: string; score: number }
    • ​对象字面量推断​​:根据属性初始值精确推导类型

🔄 三、函数类型推断题

​题目 3:函数参数与返回值推断​

const add = (a: number, b: number) => a + b;
const users = ["Alice", "Bob"].map(user => user.toUpperCase());

​答案与解析​​:

  1. add 返回值被推断为 number(表达式 a + b 操作数均为 number
  2. users 被推断为 string[]
    • 回调函数 user => user.toUpperCase() 中:
      • user 根据数组元素推断为 string(上下文类型推断)
      • 返回值 user.toUpperCase() 返回 string

🎯 四、上下文类型推断题

​题目 4:事件处理器参数推断​

window.addEventListener("click", e => {console.log(e.clientX);
});

​答案与解析​​:

  • e 被推断为 MouseEvent
    • ​上下文驱动​​:根据 addEventListener 的泛型签名自动匹配事件类型
    • 无需显式声明,避免冗余类型注解

⚖️ 五、联合类型与字面量题

​题目 5:联合类型与字面量收缩​

let value: number | string = Math.random() > 0.5 ? 42 : "42";if (typeof value === "string") {value.toUpperCase(); // 此处 value 类型是什么?
}

​答案与解析​​:

  • 外层 value 被推断为 number | string(联合类型)
  • if 块内被收窄为 string
    • ​控制流分析​​:typeof 守卫触发类型收窄
    • 可安全调用 .toUpperCase()(仅 string 可用)

💡 六、进阶技巧题

​题目 6:泛型推断与条件类型​

type IsString<T> = T extends string ? true : false;
type A = IsString<"hello">; // A 的类型?
type B = IsString<number>;  // B 的类型?

​答案与解析​​:

  • A 被推断为字面量类型 true
  • B 被推断为字面量类型 false
    • ​条件类型分发​​:根据 T 是否满足 extends string 返回不同字面量

✅ 高频考点总结

​场景​​核心规则​​典型题号​
变量初始化let 拓宽类型,const 不拓宽1
数组/对象推断最佳公共类型 + 属性推导2
函数上下文参数/返回值表达式推断 + 上下文类型3, 4
类型收窄typeof/instanceof 守卫5
泛型与条件类型类型分发 + 字面量返回6

💡 ​​避坑指南​​:

  • 空数组初始化 let arr = [] 会推断为 any[](需显式注解)
  • 函数无返回值时推断为 void(非 undefined
  • 启用 strictNullChecks 后,未初始化变量可能推断为 undefined
    深入练习可参考 TypeScript Playground 实时验证类型推断结果。

相关文章:

  • NXP S32K146 T-Box 携手 SDNAND(贴片式 TF 卡):驱动汽车智能革新的黄金组合
  • 接口测试不再难:智能体自动生成 Postman 集合
  • 计算机系统(6)
  • 翻译核心词汇
  • 软考-计算机硬件组成
  • 微信小程序渗透测试指北(附案例)
  • 小结:Spring AOP 切点表达式
  • python-生日悖论
  • OpenCV——图像金字塔
  • std::make_shared简化智能指针 `std::shared_ptr` 的创建过程,并提高性能(减少内存分配次数,提高缓存命中率)
  • 第30节 Node.js C/C++ 插件
  • ARXML可视化转换工具使用说明
  • C#实现无声视频的配音与字幕生成器
  • 接到数据分析任务后,怎么判断是分类还是回归?什么时候你该考虑换模型?
  • XML 注入与修复
  • Docker入门篇--从安装到使用
  • 回调接口模式
  • Docker|简单入门
  • Android自动化AirScript
  • Appium+python自动化(二十)-- Monkey日志
  • 宁波象山网站建设/网站seo排名优化价格
  • 博山政府网站建设哪家专业/互联网公司排名
  • 东营新闻联播在线直播今晚/aso优化的主要内容为
  • 设计与网站建设案例/网站站点查询
  • wordpress手机访问/搜狗关键词优化软件
  • 中国纪检监察报社官网/seo优化排名营销