Null与Undefined的类型推断问题

let x = 1
let z = '2'
x = z  //错误

上面的报错是因为 x 被推断为 number , 而 z 被推断为 string , 所以赋值失败
但是为什么下列代码能赋值成功?

let x = null
x = 1

为什么下列代码赋值失败?

let b: null = null
b = 1 // 错误

同样的情况 undefined 也有。

这是因为 typescript 编译器把 undefined 和 null 都推断成 any 类型了吗?

阅读 3.4k
2 个回答

let x = undefined等价于let x,这时候x类型为any,所以x可以被赋值为任何类型。let b: undefined = undefined强制申明b的类型为undefined,所以不能为number
undefinednull为不同类型,并不等价。

新手上路,请多包涵

可以看一下MDN上对undefined和null的解释,undefined的含义是“未赋值”,null的含义是“空对象”,平时我们设var x; 相当于var x = undefined;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进