2017-02-28 44 views
3

我以前見過這種語法,如果條件爲真,我想要做的事情我會寫出來。什麼是打字稿中的空白(條件&&動作)

() => void (x === 0 && this.setZero()) 

爲什麼你把x === 0 && this.setZero()換成void? 這種模式的名稱是什麼?

Void將返回undefined,但如果this.setZero()返回undefined爲什麼不只是這樣做?

() => x === 0 && this.setZero() 

它們都是有效的ts。用虛空包裝它更安全嗎?

回答

3

這只是一個JavaScript的東西。

void是一個很奇怪的JavaScript操作:計算它的操作數,然後採取undefined作爲其結果。所以,你的

() => void (x === 0 && this.setZero()) 

...是一個箭頭函數總是返回undefined,與調用this.setZero()(如果x === 0)的可能的副作用。

你爲什麼把x === 0 & & this.setZero()in void?

這樣的功能總是回報undefined,而不是返回false(如果x === 0是假的)或this.setZero()結果(如果x === 0true)。

這種模式的名稱是什麼?

我不認爲它有一個,具體而言。

您的() => x === 0 && this.setZero()替代方案將返回false或結果this.setZero()

我就注意到

() => void (x === 0 && this.setZero()) 

不正是

() => { x === 0 && this.setZero(); } 

呢,因爲除非你使用return一個詳細的箭頭功能不返回任何東西;另一種方法是:

() => { if (x === 0) this.setZero(); } 
+0

要解釋爲什麼它可能用在這裏,很可能是這個箭頭功能在承諾繼續使用,開發人員專門值不一定要在回報'FALSE'或'this.setZero()'的結果,但只要承諾/然後就可以完成任何事情。 'void'是實現這個結果的一個非常緊湊的方法。 – cdhowie

+0

@cdhowie:嘿,我剛剛添加(但不是承諾位)。請注意,在這種情況下,'void'不像一個詳細的箭頭那麼緊湊。 –

+2

雖然它很小巧,但顯然更令人困惑。混淆的代碼導致錯誤和維護問題。最好是冗長的,讓縮小器做他們的事情。 –

相關問題