flowjs: chamada do método `join`. O método não pode ser chamado em misto

Digamos que eu tenho animais constantes, com os quais eu importo

import animals from './animals

Digamos que os animais constantes sejam:

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

Diga que eu quero construir uma consulta de URL para a API de alguns animais e escreva o seguinte código:

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

Agora, esse código gera uma sequência de animais, separados pela palavra animal e espaço em branco, que é codificado em URL e corresponde corretamente à superfície da API de destino.

No entanto, o FlowJS rejeita esse código com:

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

Minha pergunta é: por que? A matriz claramente não é mista, é uma constante e Object.valuesdevemos estar retornando algo do tipo [string]?

O que é detecção de fluxo e como evitá-lo?