undefined和null是所有类型的子类型。
请问下:
1.那么undefined和null都可以赋值给任何的类型的变量呀,为何以下会报错呢:
但是会报错:
Type 'undefined' is not assignable to type 'number'.ts(2322)
2.这里的undefined和null是所有类型的子类型
这里的所有类型是指的包括原始数据类型
,Any
,包装类型(eg. String, Number...)
还是仅仅指的是原始数据类型
呢?
undefined和null是所有类型的子类型。
请问下:
1.那么undefined和null都可以赋值给任何的类型的变量呀,为何以下会报错呢:
但是会报错:
Type 'undefined' is not assignable to type 'number'.ts(2322)
2.这里的undefined和null是所有类型的子类型
这里的所有类型是指的包括原始数据类型
,Any
,包装类型(eg. String, Number...)
还是仅仅指的是原始数据类型
呢?
Strict Null Checks - strictNullChecks
When strictNullChecks is false, null and undefined are effectively ignored by the language. This can lead to unexpected errors at runtime.
首先你这个报错是ts报错,如果不强制类型校验不影响运行,其次就是为什么报错,因为在js中undefined和number都属于基本类型,所以这两个是同级的你定义了number当然设置为undefined就会报错,你可以定义为number| undefined,最后你声明了一个变量没给它赋值,在js中undefined的意义不就是在这里吗,对于声明但未赋值的变量就是undefined,你在赋值一个undefined的意义在哪?
TypeScript: Documentation - Everyday Types
TypeScript: TSConfig Reference - Docs on every TSConfig option
Strict Null Checks -
strictNullChecks
WhenstrictNullChecks
isfalse
,null
andundefined
are effectively ignored by the language. This can lead to unexpected errors at runtime.When
strictNullChecks
istrue
,null
andundefined
have their own distinct types and you’ll get a type error if you try to use them where a concrete value is expected.
所以你得这样做,
let num: number | undefined
num = undefined
// or
let num: number | null
num = null
8 回答4.8k 阅读✓ 已解决
6 回答3.6k 阅读✓ 已解决
6 回答2.5k 阅读
5 回答6.4k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
3 回答2.6k 阅读✓ 已解决
在默认情况下,TS会开启--strictNullChecks标记