Flow 允许与 object.entries 和 string 连接

Rya*_*n Z 6 javascript flowtype

我有这样的类型:

type Cool = {
    [key: string]: number
}
Run Code Online (Sandbox Code Playgroud)

现在,假设我有一个该类型的对象:

let my: Cool = {
    "asdf": 1,
    "jkl": 2
}
Run Code Online (Sandbox Code Playgroud)

当我跑步时Object.entries(my),我得到了[["asdf", 1], ["jkl", 2]]。这似乎很正常。但是,我想将每个键组合起来形成一个字符串,如下所示:

let mystring = "";
Object.entries(my).forEach(entry => {
    mystring = entry[1] + mystring;
});
Run Code Online (Sandbox Code Playgroud)

我希望它mystring等于“jklasdf”,确实如此。但是,我mystring = ...在线路上遇到了流程错误。错误指出:

无法转换Object.entries(...)[0][1]为字符串,因为混合 [1] 与字符串不兼容

关于如何解决这个问题的任何想法?谢谢!

Fra*_*ion 6

Object.entries 键入为:

静态条目(对象:$NotNullOrVoid):数组<[字符串,混合]>

当您尝试使用mixed类型的值时,您必须首先弄清楚实际类型是什么,否则最终会出现错误,因此您可以使用 Flow 的类型细化

Object.entries(my).forEach(entry => {
  if (typeof entry[1] === 'number') {
    mystring = entry[1] + mystring;
  }
});
Run Code Online (Sandbox Code Playgroud)

你也可以只投entry[1]

Object.entries(my).forEach(entry => {
  mystring = Number(entry[1]) + mystring;
});
Run Code Online (Sandbox Code Playgroud)

或者entry像这样添加类型,entry: [string, any]但请注意使用 any 是完全不安全的,应尽可能避免。

演示