功能类型的可选参数

时间:2018-10-26 22:26:21

标签: javascript flowtype

说我有以下(简单的)flow.js示例:

type Example = (d: number, b?: string) => void

const f:Example = (d: number, boo: string) => {}

无法通过以下方式进行编译:

const f:Example = (d: number, boo: string) => {}
                                      ^ Cannot assign function to `f` because string [1] is incompatible with undefined [2] in the second argument.
References:
3: const f:Example = (d: number, boo: string) => {}
                                      ^ [1]
1: type Example = (d: number, b?: string) => void
                                  ^ [2]

我想了解为什么?我认为第二个参数(b)被注释为可选参数,例如如果不存在,那很好,但是必须存在一个字符串吗?

很显然,这是不准确的。对这里发生的事情的实际解释是什么?以及我该如何表现自己的行为(例如,一个带有一个或两个参数的函数,当第二个参数存在时,它必须是字符串)

尝试流链接:https://flow.org/try/#0C4TwDgpgBAogHgQwLZgDbQLxQBQBMBcUAdgK5IBGEATgDRTkD8hAzsFQJZEDmAlFBgD4oANwD27XAChJAY1FFWUAGb54yNJhwFiZSrXqjRLNp178hAbwC+QA

1 个答案:

答案 0 :(得分:1)

可选参数?表示调用者可能会或可能不会提供参数。 not 并不意味着特定的被叫方可以选择是否忽略该参数。

错误告诉您f类型的函数Example总是希望有一个字符串参数,即使并非总是提供该参数。

可能打算做的是:

type Example = (d: number, b: string) => void

const f: Example = (d: number, boo: string) => {}
const g: Example = (d: number) => {}

Try it out

这是有效的,因为始终提供字符串参数,但是被叫方可以选择是否使用该参数。