当参数具有默认值时定义类型的语法是什么?

What is the syntax for defining a type when parameter has a default value?

如果 config 参数具有默认值,我该如何定义它的类型?

function (config = {}) {};

function f(config: Object = {}) {}

或者,更一般地说:

function f(p: T = v) {}

其中 T 是类型,v 是类型 T 的值。

有趣的是,函数f的类型是(p?: T): void。也就是说,Flow 理解提供默认值会使参数可选。您不需要显式地使参数类型成为可选的——尽管它没有坏处。

.js.flow文件中写入declare function语句时,不能包含默认值;它会导致错误。所以必须显式声明参数是可选的:

declare function f(p?: T): void;

粗箭头函数中的流类型和默认参数的工作方式类似。

给定一个名为 foo 的函数,它接受参数 bar,您可以在参数后立即用冒号指定类型,然后使用赋值 (=) 运算符设置其默认值。最后,在关闭括号后,立即用另一个冒号定义 return 值的类型。

foo = (bar: string = 'baz'): string => bar;
foo(); // 'baz'