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 类型了吗?
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 类型了吗?
可以看一下MDN上对undefined和null的解释,undefined的含义是“未赋值”,null的含义是“空对象”,平时我们设var x; 相当于var x = undefined;
let x = undefined
等价于let x
,这时候x
类型为any
,所以x可以被赋值为任何类型。let b: undefined = undefined
强制申明b的类型为undefined
,所以不能为number
。undefined
和null
为不同类型,并不等价。