为什么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
相关产品推荐
相关产品推荐

