Ecmascript 6 Flowtype中的ES6映射

Ecmascript 6 Flowtype中的ES6映射,ecmascript-6,flowtype,javascript,Ecmascript 6,Flowtype,Javascript,处理中的Map对象的适当方法是什么 动物的类型。获取(笼号)是?动物,而不是动物。您需要检查它是否未定义: function feedAnimal(cageNumber:number) { const animal = animals.get(cageNumber); if (!animal) { return; } // ... } 如果唯一的目标是永远不让无效,那么您也可以使用If(animals.has(cageNumber)),它更具可读性(而且可能更快,因

处理中的
Map
对象的适当方法是什么

动物的类型。获取(笼号)是
?动物
,而不是
动物
。您需要检查它是否未定义:

function feedAnimal(cageNumber:number) {
  const animal = animals.get(cageNumber);

  if (!animal) {
    return;
  } 
  // ...
}

如果唯一的目标是永远不让
无效
,那么您也可以使用
If(animals.has(cageNumber))
,它更具可读性(而且可能更快,因为您不需要在之后立即分配东西来移除它们)。但是我不知道如何返回正确类型的东西,例如,
Animal
。根据流程,您的解决方案和我的两种返回类型都是
void | Animal
。这是有意义的,因为您可能不希望Flow猜测代码的作用,因此返回类型等于
animal
的类型。“如果有人能解决这个问题,我很感兴趣。”克里斯蒂安。这个答案中没有分配。所有发生的事情都是分配给参考
动物
。理论上,
if(animals.has(cageNumber)){const-animal:animal=animals.get(cageNumber);…}
可以工作,但需要流来知道
has
get
是如何关联的。这是可能的,但不太可能,因为
Map
不经常使用。无论如何,我敢打赌同时使用
has
get
比使用
get
然后进行测试要慢,因为它需要两次访问-除非JIT有相应的优化(我怀疑这是因为
Map
没有经常使用)。
const animal:Animal = animals.get(cageNumber);
                      ^^^^^^^^^^^^^^^^^^^^^^^^ call of method `get`

const animal:Animal = animals.get(cageNumber);
                      ^^^^^^^^^^^^^^^^^^^^^^^^ undefined. This type is incompatible with
const animal:Animal = animals.get(cageNumber);
                      ^^^^^^^ Animal
function feedAnimal(cageNumber:number) {
  const animal = animals.get(cageNumber);

  if (!animal) {
    return;
  } 
  // ...
}