2017-07-24 43 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) { 
} 

,沒有任何額外的代碼。

所以你需要編寫正確的校驗碼。