有没有一个专门的函数来检查null和未定义的TypeScript?

由于TypeScript是强types的,所以简单地使用if () {}来检查null和undefined并不正确。

TypeScript有专门的函数或语法糖吗?

使用一个杂耍检查,你可以在一个命中testingnullundefined

 if (x == null) { 

如果使用严格检查,那么对于设置为null值而言,只有这样,对于未定义的variables,其值才会为真:

 if (x === null) { 

你可以使用这个例子用不同的值来尝试这个:

 var a: number; var b: number = null; function check(x, name) { if (x == null) { console.log(name + ' == null'); } if (x === null) { console.log(name + ' === null'); } if (typeof x === 'undefined') { console.log(name + ' is undefined'); } } check(a, 'a'); check(b, 'b'); 

产量

“a == null”

“a是未定义的”

“b == null”

“b === null”

我在打字游乐场做了不同的testing:

http://www.typescriptlang.org/play/

 let a; let b = null; let c = ""; var output = ""; if (a == null) output += "a is null or undefined\n"; if (b == null) output += "b is null or undefined\n"; if (c == null) output += "c is null or undefined\n"; if (a != null) output += "a is defined\n"; if (b != null) output += "b is defined\n"; if (c != null) output += "c is defined\n"; if (a) output += "a is defined (2nd method)\n"; if (b) output += "b is defined (2nd method)\n"; if (c) output += "c is defined (2nd method)\n"; console.log(output); 

得到:

 a is null or undefined b is null or undefined c is defined 

所以:

  • 检查(a == null)是否正确地知道a是否为null或未定义
  • 检查(a!= null)是否正确地知道a是否被定义
  • 检查是否(a)知道a是否被定义是错误的

TypeScript是否有专门的函数或语法糖

不,我只是做something == null与JavaScript相同的something == null

 if( value ) { } 

如果值不是:则评估为真:

  • 空值
  • 未定义
  • 为NaN
  • 空string(“”)
  • 0

打字稿包括JavaScript规则。

 if(data){} 

这是数据

  • 空值
  • 未定义
  • ….

如果您使用的是TypeScript,那么让编译器检查空值和未定义值(或其可能性)是一种更好的方法,而不是在运行时检查它们。 (如果你想在运行时检查,那么尽可能多的答案表明,只需使用value == null )。

使用编译选项strictNullChecks告诉编译器扼杀可能的空值或未定义的值。 如果你设置了这个选项,那么在你想要允许null和undefined的情况下,你可以定义types为Type | null | undefined Type | null | undefined Type | null | undefined

所有,

如果您使用的是对象,那么得票最多的答案并不真实。 在这种情况下,如果一个财产不存在,支票将不起作用。 这就是我们的问题:看到这个例子:

 var x = { name: "Homer", LastName: "Simpson" }; var y = { name: "Marge"} ; var z = { name: "Bart" , LastName: undefined} ; var a = { name: "Lisa" , LastName: ""} ; var hasLastNameX = x.LastName != null; var hasLastNameY = y.LastName != null; var hasLastNameZ = z.LastName != null; var hasLastNameA = a.LastName != null; alert (hasLastNameX + ' ' + hasLastNameY + ' ' + hasLastNameZ + ' ' + hasLastNameA); var hasLastNameXX = x.LastName !== null; var hasLastNameYY = y.LastName !== null; var hasLastNameZZ = z.LastName !== null; var hasLastNameAA = a.LastName !== null; alert (hasLastNameXX + ' ' + hasLastNameYY + ' ' + hasLastNameZZ + ' ' + hasLastNameAA); 

结果:

 true , false, false , true (in case of !=) true , true, true, true (in case of !==) => so in this sample not the correct answer 

plunkr链接: https ://plnkr.co/edit/BJpVHD95FhKlpHp1skUE

如果您想要传递tslint而不将strict-boolean-expressions设置为allow-null-unionallow-undefined-union ,则需要使用来自nodeutil模块的isNullOrUndefined或者滚动您自己的:

 // tslint:disable:no-null-keyword export const isNullOrUndefined = <T>(obj: T | null | undefined): obj is null | undefined => { return typeof obj === "undefined" || obj === null; }; // tslint:enable:no-null-keyword 

不完全是语法糖,但是当你的tslint规则是严格的时候是有用的。

我总是这样写:

 var foo:string; if(!foo){ foo="something"; } 

这将工作正常,我认为这是非常可读的。

您可以使用

 if(x === undefined)