2017-07-24 51 views
-1

我想找出什么建议检查未定义和null。打字稿是否将一元否定运算符转换为?

在JavaScript中,一元运算符可以像两个equals一样进行类型转换。打字稿对此有何作用,例如:

if (!foo)。

是否transpiled到

if (foo != undefined && foo != null)

或克罗克福德的建议,如:

if (foo !== undefined && foo !== null)

或者是它不transpiled到这种事情?

另见:https://dorey.github.io/JavaScript-Equality-Table/

+0

这和javascript完全一样。 Typescript是javascript的超集,在这种情况下没有区别。 –

+0

好吧,这有点令人失望。我想念CoffeeScript处理坏的部分。所以建议使用自定义解决方案来处理标准错误检查(空和未定义)? – nottinhill

+2

这是有意的。 Typescript是带有类型系统的javascript,它不会改变你的代码(除非你使用高级功能并将它编译到不支持它的目标上) –

回答

4

打字稿,不像CoffeeScript的,不去做那些之类的东西,所以如果你有这样的TS码:

let foo; 
if (!foo) { 
    ... 
} 

它将编译为:

var foo; 
if (!foo) { 
    ... 
} 

如果你想避免总是检查这样的事情:if (foo !== undefined && foo !== null)然后你可以简单地提取到一个函数:

function isNothing(obj: any): boolean { 
    return obj === undefined || obj === null; 
} 

let foo; 
if (isNothing(foo)) { 
    ... 
} 
+0

只是出于好奇,与仅仅使用if (obj){console.log(“object exists”}'? – Kokodoko

+1

@Kokodoko在大多数情况下,if(obj)'会工作得一样,但有些情况下会失败,例如'obj = 0'。另外,OP似乎想要像这样检查它。 –

2

您可以使用Typescript Playground来检查您的代码将如何被转发。

在你的情况

var foo: any; 
if (!foo) { 
} 

将transpiled到

var foo; 
if (!foo) { 
} 

,没有任何额外的代码。

所以你需要编写正确的校验码。