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

[ TypeScript ] “undefined extends xxx“ 总是为 true 的 bug

版本号

"typescript": "^5.7.3",
"unplugin": "^2.2.0",

说明

在使用 unplugin 时 , 我定义插件的参数是 必填的,
使用时却是一个可空参数, 不传参也不会报错,
(options?: UserOptions) => Return
😲😲😲 怎么突然冒出来个问号…
看源码, 发现是这样定义的类型

type UnpluginFactoryOutput<UserOptions, Return> =
    undefined extends UserOptions
    ? (options?: UserOptions) => Return  // UserOptions 允许 undefined 时
    : (options: UserOptions) => Return;
// 使用
let a: UnpluginFactoryOutput<{ my_name: string } | undefined, boolean>
let b: UnpluginFactoryOutput<{ my_name: string }, boolean>

现在变量 ba 结果一模一样,
都是可空参数 options?: UserOptions,
说明 不指定 undefined , 它也认为我指定了 undefined
😲😲😲

解决方案

想要 undefined extends UserOptions 可以正确判断两种情况,
必须在 ts 配置文件中设置 "strictNullChecks": true

如果 未启用 strictNullChecks ( 默认是 false ),
ts 认为 undefined 可赋值给 所有类型,
就会出现上面的错误情况

相关文章:

  • MySQL分库分表后单表数据还是过大怎么办
  • javascript闭包在实际项目中有哪些应用场景?请举例说明。
  • JavaScript系列(84)--前端工程化概述
  • pytorch3d安装记录
  • 【JAVA】io流之缓冲流
  • 【复习】计算机网络
  • Qt 中集成mqtt协议
  • Spring Boot嵌入式服务器深度解析:从配置到调优的全方位指南
  • 【问题】Qt c++ 因编码问题解析json失败
  • Linux 命令大全完整版(05)
  • OpenBMC:BmcWeb定义service
  • R包的作用及安装指南
  • Oracle和Mysql的区别
  • 14.8 Auto-GPT 自主智能体设计解密:构建具备长期记忆的智能决策系统
  • 微软Win11新动态:官方“换机助手”曝光,PC数据迁移或迎全新体验
  • 知识库管理系统驱动企业知识体系重构与智能协作路径解析
  • 前端工程化
  • 【Web前端开发精品课 HTML CSS JavaScript基础教程】第二十六章课后题答案
  • (面试经典问题之内存池篇)内存池构成、作用及其基本原理详解
  • 【程序人生】软件架构师职业发展规划 (2023)
  • 中国做的比较好的网站/武汉seo优化排名公司
  • wordpress photolux/河北优化seo
  • 南京网站定制/福州seo排名公司
  • 网站文章列表和图片列表排版切换代码/自媒体营销模式有哪些
  • 郫县网站建设/百度快照优化的优势是什么
  • wordpress 全图片/优化大师破解版app