undefined和null都可以赋值给任何的类型的变量吗?

undefined和null是所有类型的子类型。

请问下:
1.那么undefined和null都可以赋值给任何的类型的变量呀,为何以下会报错呢:

image.png
但是会报错:

Type 'undefined' is not assignable to type 'number'.ts(2322)

image.png

2.这里的undefined和null是所有类型的子类型 这里的所有类型是指的包括原始数据类型Any包装类型(eg. String, Number...)还是仅仅指的是原始数据类型呢?

阅读 1.8k
4 个回答

image.png

在默认情况下,TS会开启--strictNullChecks标记

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
When strictNullChecks is false, null and undefined are effectively ignored by the language. This can lead to unexpected errors at runtime.

When strictNullChecks is true, null and undefined 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
推荐问题
logo
Microsoft
子站问答
访问
宣传栏