TypeScript中boolean类型可赋值为undefined且不报错的原因
const boo : boolean = undefined
该现象的具体技术原因可分为两个层面:
- 编译期静态检查层面:TypeScript的类型校验规则受
tsconfig.json中的编译选项控制,默认未开启strictNullChecks配置时,undefined和null属于所有类型的合法子类型,允许被赋值给boolean、number、string等任意类型的变量,此时TS静态检查不会抛出类型错误。只有手动开启strictNullChecks(或是开启strict严格模式总开关,该选项会被默认启用)时,boolean类型才仅允许接收true、false两个值,直接赋值undefined会触发类型不匹配的编译报错。 - 运行时执行层面:TypeScript的类型注解仅在编译阶段生效,代码编译为纯JavaScript的过程中所有类型标注都会被完全擦除,上述代码编译后等价于
const boo = undefined。JavaScript本身是动态弱类型语言,没有静态类型约束机制,给任意变量赋值undefined都是合法操作,执行阶段自然不会抛出错误。
内容的提问来源于stack exchange,提问作者keenshark
相关产品推荐
相关产品推荐

