编写此方法时:
// @flow
function greeting (name: string = 8): string {
return `Hello ${name}!!`
}
请检查默认值是否正确,对我来说还可以,但是使用以下代码:
// @flow
function greeting (name = 'world'): string {
return `Hello ${name}!!`
}
greeting(8)
使用数字参数没有错误,就像我期望的那样
function greeting (name: string = 'world'): string {
return `Hello ${name}!!`
}
为什么不能用默认值推断类型?
谢谢。
答案 0 :(得分:1)
那是因为在您的示例中,该函数返回一个字符串,但是没有为name
参数声明类型。
由于要使用反引号(``)将name
插入字符串中,因此即使它是数字,其类型也会隐式转换为字符串。
因此,只要您返回一个字符串-您的符号就可以了。
如果您希望流程出错,可以执行以下操作:
function greeting (name: string = "name"): string {
return `Hello ${name}!!`
}
然后在您这样称呼它时:
greeting(8);
您将收到以下错误:
greeting(8)
^ Cannot call `greeting` with `8` bound to `name` because number [1] is incompatible with string [2].
References:
6: greeting(8)
^ [1]
2: function greeting (name: string = "name"): string {
整个事情都围绕着推理。 想象以下情况:
function(name: string | number = "name") {..
在这种表示法中,name
可以是字符串,也可以是数字。
Flow无法通过默认值知道您的意图,因此它将所有内容推断为any