这个函数存在一个bug。调用
这是因为:
capitalize('')
会抛出TypeError: Cannot read property 'toUpperCase' of undefined
异常。// @flow
function capitalize(str: string) {
return str[0].toUpperCase() + str.slice(1)
}
这是因为:
var a = "foo" // : string
var b = a[0] // also : string
为什么类型推断认为b
是一个string
,而不是一个string|void
,而后者似乎是b
的正确类型?
这可以通过类型转换强制执行
return (str[0]: string|void).toUpperCase() + str.slice(1)
.charAt(0)
:-) - Bergivar a = [1]; var b = a[100]
是的,将b
推断为number
可能是有道理的。尽管这样做并不安全,但它将防止许多错误的结果。仍然令人惊讶的是,Flow决定这样做,因为Flow的主要设计原则之一是正确性(没有运行时异常)。 - Red Mercury