Javascript flowjs:方法“join”的调用。方法不能在混合对象上调用

Javascript flowjs:方法“join”的调用。方法不能在混合对象上调用,javascript,types,casting,ecmascript-6,flowtype,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.val

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

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:')} `, '')
现在,该代码生成一个由单词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]类型的内容


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

对象.values函数此时返回一个
数组
类型。因此,您需要将其转换为一个字符串数组,如下所示

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
函数是一个建议。所以它还不是语言的一部分。只要
Object.values
函数是EcmaScript标准的一部分,您就不需要通过强制转换来解决这个问题,这只是时间问题,flow团队可能会正确地实现它