You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么TypeScript非严格模式下允许给string常量赋值undefined?

为什么非严格模式下undefined可赋值给string类型,number却不行?
  • 非严格模式下,TypeScript默认将undefined和null视为所有类型的子类型(never类型除外)。这意味着任何类型的变量都可以接收undefined或null值,所以const s: string = undefined;不会触发类型错误。
  • number和string是完全独立的基本类型,不存在子类型关系,TypeScript的类型检查器会严格校验这类基本类型的赋值,所以const s: string = 5;会直接报错。
  • 这个规则是TypeScript为兼容JavaScript松散特性设计的:早期大量JS代码存在变量值为null/undefined的情况,非严格模式的宽松规则能降低从JS迁移到TS的成本,不需要立刻处理所有空值场景。当开启strictNullChecks(严格模式核心选项之一)后,undefined和null就不再是其他类型的子类型,此时string类型只能接收字符串值,赋值undefined就会报错。

内容的提问来源于stack exchange,提问作者THX-1138

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 14:50:33