gpt4 book ai didi

flowtype - 具有默认值的参数的类型注释

转载 作者:行者123 更新时间:2023-12-03 16:05:06 26 4
gpt4 key购买 nike

在以下函数定义中:

 function foo(a: number = 42): number {return a+1;}

... a: number 的语义是什么?注解?

是不是说变量 a 里面总是有一个值
函数体还是说客户端程序员在调用时应该始终提供一个值?

我注意到以下两个代码片段都进行了类型检查,没有错误(使用 flow-bin 0.57.3):

片段 1
function foo(a: number = 42): number {return a+1;}
type FooT= (a: number)=> number

(foo: FooT)

foo();

(试试 here)

片段 2
function foo(a: ?number = 42): number {return a+1;}
type FooT = (a: ?number)=> number

(foo: FooT)

foo();

(试试 here)

在这种情况下,建议的注释方法是什么?

我的首选方式是#2,因为客户端程序员只需要查看 FooT 的定义。 type 来实现该参数是可选的。这让我可以告诉用户我的
库:“只需查看函数的类型( FooT )”。

而对于方式#1,我必须告诉他们“函数的类型( FooT )似乎表明需要一个参数,但实际上并不是因为,看,如果您查看实现,默认值值提供”。

那么,哪个片段更惯用呢?

请注意,有一个 answer一个相关的问题似乎表明可以在函数的实现中将类型注释为强制性的,而在声明中为可选的。但这在这种情况下似乎不起作用。例如。以下不进行类型检查:
function foo(a: number = 42): number {return a+1;}
type FooT = (a: ?number)=> number

(foo: FooT)

foo();

(试试 here)

最佳答案

你可以去:

function foo(a: number = 42): number {return a+1;}
type FooT = (a?: number)=> number

(foo: FooT)

foo();

关注 ?在类型定义中的位置:
(a?: number) - optional范围

对比
(a: ?number) - maybe类型

两者唯一的区别是可选参数 不能为空 ,就像 parameter with default value

关于flowtype - 具有默认值的参数的类型注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47784957/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com