2017-09-19 102 views
2

我不知道如何讓流程來處理許多類型的聯合參數。流量類型:處理函數的參數,可能是多種類型

示例代碼:

// @flow 

function foo(a: string | number[] | Date): string { 
    if (typeof a === 'string') { 
     return a.toUpperCase() 
    } else if (a instanceof Array) { 
     return a.join('-') 
    } else if (a instanceof Date) { 
     return a.getMonth().toString() 
    } 
    return '' 
} 

流量錯誤:

6: } else if (a instanceof Array) { 
          ^Array. This type is incompatible with 
3: function foo(a: string | number[] | Date): string { 
       ^union: string | array type | Date 

Try flow link

流量似乎當我使用typeof,但事實並非總是不夠好,因爲typeof []typeof new Date()注意都是"object"

如何使流量在這裏給我一個綠色的檢查?

+0

是否看起來像一個bug,但FYI它正常工作與'Array.isArray',你基本上總是要使用,而不是'的instanceof Array'。 – loganfsmyth

+0

因爲你定義了默認情況''return'',所以你對'foo'的類型安全性似乎並不特別自信。 – ftor

+0

@ftor流似乎並沒有意識到這些都是三個選項要麼,所以沒有這種gauranteed'回報「」'你'字符串:這種類型是不符合的隱式返回undefined.' –

回答

0

我只是嘗試用你的榜樣和if不斷變化的訂單幫助!

// @flow 

function foo(a: string | number[] | Date): string { 
    if (typeof a === 'string') { 
     return a.toUpperCase() 
    } else if (a instanceof Date) { 
     return a.getMonth().toString() 
    } else if (a instanceof Array) { 
     return a.join('-') 
    } 
    return '' 
} 

沒有錯誤。

不要問我爲什麼:)

+0

那麼這有點神祕...... –

+0

你應該記錄一個錯誤。 –

相關問題