mate64 mate64 - 3 months ago 27
Javascript Question

ES6 Map in Flowtype

What is the appropriate way to deal with

Map
objects in ?

const animals:Map<id, Animal> = new Map();

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

...
}


Error

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


Flowtype Map declaration

Answer

Type of animals.get(cageNumber) is ?Animal, not Animal. You need to check that it's not undefined:

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

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