javascript – flowjs:调用方法`join`.混合方法不能调用

说我有一个恒定的动物,我导入

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函数返回一个数组< 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标准的一部分,流程团队就可能正确实现它.

上一篇:Python:转换字符串以用于ctypes.c_void_p()


下一篇:java – 具有对象类型的Jackson JSON列表