TypeScript中给类型赋值null和undefined值,造成空指针问题

1,309 阅读1分钟

在TS中,有对应JS中的基础类型null和undefined。

TypeScript里,JS中的基本数据类型undefinednull两者各自有自己的类型分别叫做undefinednull

let n:null = null
let u:undefined = undefined

默认情况下,null和undefined作为所有的子类型,可以给null和undefined赋值给string|number等类型

let num:number = 12
num = null //ok
num = undefined //ok

let bol:boolean = false
bol = null //ok
bol = undefined //ok

let str:string = '123'
str = null //ok
str = undefined //ok

在编程过程成空指针是最常见的bug之一,在TypeScript中我们无法使用具体的类型来表示特定的变量不能为空!
在最新typescript的新版本中,解决了这个问题,TypeScript 2.0 增加了对不可为空类型的支持。有一种新的严格空值检查模式,他提供了strictNullChecks通过在tsconfig.json设置该参数,启功严格空值检查。 但在TS中,为了各版本的兼容,strictNullChecks可以设置为false

如果strictNullChecks=true状态下想要设置null和undefined的类型,可以使用 联合类型(Union Types)表示取值可以为多种类型中的一种。 对于下面的代码,userName可以接受null和undefined类型的值

let userName: string | null |undefined;
userName = "赛亚人";  // OK
userName = null;      // OK
userName = undefined; // ok