Как набрать Hint es6 метод как найти с помощью Flow - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь напечатать такой метод, как find, но я застрял.

Пример:

// My Array of object / class
export const heroes: Array<Hero> = [
  {
    info: 'superman',
    strenght: 100,
  },
  {
    info: 'batman',
    strenght: 20,  
  },
];

export class HeroService {
    static getHeroFromStrenght(strenght: number): Hero {
        // Try to typeHint this, flow says it's missing in 'undefined'
        return heroes.find((hero: Hero) => {
          return hero.strenght == strenght;
        });
    }
}

В моем фиктивном примере я хотел бы использовать этот статический методпозже, но поток думает, что find возвращает неопределенное / bool-значение вместо типа, который я действительно хочу иметь ...

Есть идеи, как мне с этим справиться?Я попытался использовать такой интерфейс, но он все еще не работает:

interface Array<Hero> {
  find(predicate: (search: Hero) => boolean) : Hero;
}

1 Ответ

0 голосов
/ 15 июля 2018

Ваша подпись ошибки по потоку:

20:         return heroes.find((hero: Hero) => {
                   ^ Cannot return `heroes.find(...)` because undefined [1] is incompatible with `Hero` [2].
References:
[LIB] ..//static/v0.76.0/flowlib/core.js:245:     find(callbackfn: (value: T, index: number, array: Array<T>) => any, thisArg?: any): T | void;
                                                                                                                                          ^ [1]
18:     static getHeroFromStrenght(strenght: number): Hero {
                                                      ^ [2]

В то время как простое изменение с Hero на Hero | void проходит проверку потока:

static getHeroFromStrenght(strenght: number): Hero | void {

Что верно, если, например,Массив heroes будет пустым, а find() вернет undefined (void).

Проверка на Try Flow .

...