javascript - Flow 允许与 object.entries 和字符串连接

标签 javascript flowtype

我有这样的类型:

type Cool = {
    [key: string]: number
}

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

let my: Cool = {
    "asdf": 1,
    "jkl": 2
}

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

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

我希望 mystring 等于“jklasdf”,确实如此。但是,我在 mystring = ... 行收到流程错误。错误状态:

Cannot cast Object.entries(...)[0][1] to string because mixed [1] is incompatible with string

关于如何解决这个问题有什么想法吗?谢谢!

最佳答案

Object.entries 的类型为:

static entries(object: $NotNullOrVoid): Array<[string, mixed]>

当您尝试使用 mixed 的值时type 你必须首先弄清楚实际的类型是什么,否则你会得到一个错误,所以你可以使用 Flow 的 type refinement :

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

你也可以只转换entry[1]:

Object.entries(my).forEach(entry => {
  mystring = Number(entry[1]) + mystring;
});

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

DEMO

关于javascript - Flow 允许与 object.entries 和字符串连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56485512/

相关文章:

javascript - 比较 Flow 中的枚举值

javascript - 以字符串作为第一个操作数的加法运算符可以返回非字符串吗?

Javascript正则表达式只留下单词(国际版)

javascript - 检测一个点是否属于线段

javascript - 分页:使用带有 getJSON 的 "Get More"按钮

reactjs - 将 React Memo 与 Flow 结合使用的正确方法是什么?

javascript - 为什么 flowtype 认为我的变量未定义?

javascript - 数组中的 AngularJS 对象到新对象

javascript - 为什么我的 querySelector 在 Chrome 中有效,但在 VS Code 中无效?

sass - .scss 文件未找到流模块