打字稿将一元否定算子转化为什么?

时间:2017-07-24 12:21:23

标签: typescript

我试图找出建议检查undefined和null的内容。

在JavaScript中,一元运算符像两个等号一样进行类型转换。打字稿对此做了什么,例如:

if (!foo)。

是否转化为

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

或Crockford的建议如:

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

或者它没有被转化为任何类型的东西?

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

2 个答案:

答案 0 :(得分:4)

与CoffeeScript不同,Typescript不会做那些事情,所以如果你有这个ts代码:

<script>
function get_mail_content(m_id){
    var datastring = 'm_id=' + m_id;
    var a= false;
    $.ajax({
        type: "POST",
        async: false,
        url: "<?php echo site_url(); ?>admin/get_mail_contents",
        data: datastring,
        cache: false,
        success: function (result) {
            console.log(result);
            $("#content").append('<div class="mail-toolbar clearfix"> <div class="float-left"><h4 class="font-primary">This is a demo email title</h4></div><div class="float-right"><a href="#" class="btn btn-primary" title="Reply"> Reply <i class="glyph-icon icon-mail-reply"></i></a><a href="#" class="btn btn-default" title="Print"><i class="glyph-icon icon-print"></i></a><a href="#" class="btn btn-danger mrg10L" title="Delete"> <i class="glyph-icon icon-trash-o"></i></a> </div></div><div class="divider"></div><div class="pad5A clearfix mrg10B"><div class="float-left"><b>"' + result['from']  + '"</b> (john.doe@example.com) <i>to</i> <b>me</b></div> <div class="float-right opacity-80"><i class="glyph-icon icon-clock-o mrg5R"></i> 17:55, 15.10.2014</div></div><div class="email-body"><p>"' + result["content"] + '"</p></div><div class="button-pane"><a href="#" class="btn btn-blue-alt" title="Reply"><i class="glyph-icon icon-mail-reply"></i> Reply </a><a href="#" class="btn btn-default" title="Reply">Forward<i class="glyph-icon icon-mail-forward"></i> </a> </div>');  
        }
    });
    return a;
}
</script> 

它将编译为:

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

如果你想避免总是检查这样的事情:var foo; if (!foo) { ... } 那么你可以简单地将它提取到一个函数:

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

答案 1 :(得分:2)

您可以使用Typescript Playground检查代码的编制方式。

在你的情况下

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

将被转换为

var foo;
if (!foo) {
}

没有任何其他代码。

所以你需要写正确的支票代码。