流类型:处理可能有多种类型的函数参数

时间:2017-09-19 19:11:40

标签: javascript flowtype

我不知道如何获得流来处理多种类型联合的参数。

示例代码:

// @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",因此并不总是足够好。

如何让流程在这里给我一张绿色的支票?

1 个答案:

答案 0 :(得分:0)

我刚刚尝试了您的示例并更改了if s的顺序!

// @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 ''
}

没有错误。

不要问我为什么:)