javascript - flowjs : call of method `join` . 无法在混合上调用方法

标签 javascript types casting ecmascript-6 flowtype

假设我有一个恒定的动物,我用它导入

import animals from './animals

假设动物常数为:

{
  hoofed:[
    'horses',
    'sheep',
    'goats'
],
  feline: [
  'lions',
  'tigers'
],
  canine: [
    'dogs',
    'wolves'
  ]
}

假设我要构造一个对某些动物 api 的 Url 查询,并编写以下代码:

const fq = Object.values(animals).reduce((memo, animalList) => memo + `animal:${animalList.join(' animal:')} `, '')

现在,此代码生成一串动物,由单词“动物”和空格分隔,然后对其进行 URL 编码并正确匹配目标 API 表面。

然而,FlowJS 拒绝此代码:

13:   const fq = Object.values(animals).reduce((memo, animalList) => memo + `animal:${animalList.join(' animal:')} `, '')
                                                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call of method `join`. Method cannot be called on
 13:   const fq = Object.values(animals).reduce((memo, animalList) => memo + `animal:${animalList.join(' animal:')} `, '')
                                                                                                ^^^^^^^^ mixed

我的问题是:为什么?该数组显然不是混合的,它是一个常量,并且 Object.values 应该返回 [string] 类型的内容?

什么是流量检测,如何避免它?

最佳答案

Object.values函数返回 Array<mixed>此刻输入。因此,您需要将其转换为字符串数组的数组,如下所示。

let fq: string[][] = (Object.values(animals): any);

fq = fq
    .reduce((memo, animalList) => memo + `animal:${animalList.join(' animal:')} `, '')

或者使用像这样的内联转换:

const fq = ((Object.values(animals): any): string[][])
    .reduce((memo, animalList) => memo + `animal:${animalList.join(' animal:')} `, '')

Flow 目前不支持此功能,因为 Object.values功能是in stage-4作为提案。所以它还不是语言的一部分。一旦Object.values出现,您就不需要通过强制转换来解决这个问题,这应该只是时间问题。函数是 EcmaScript 标准的一部分,流程团队可能会正确实现它。

关于javascript - flowjs : call of method `join` . 无法在混合上调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44241560/

相关文章:

javascript - QuickConnect 与 Phonegap

haskell - 无法将类型 `[]' 与 `IO' 匹配——Haskell

c# - 使用 "ref"和/或 "out"作为对象类型

delphi - 为什么在调用 Dispose 之前必须转换为特定的指针类型?

javascript - mouseenter 和 append 效果不佳

javascript - 如何将所有像素大小的图像放入一个 div 中?

javascript - 选择 div 但不是 div jquery 中的输入

haskell - 没有 (Floating Int) 实例

c# - 不可空类型的通用约束

java - 对集合框架的动态类型转换效果