Как набрать Hint es6 метод как найти с помощью Flow

Я пытаюсь напечатать такой метод 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 ответ

Ваша ошибка подписи Flow:

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.

Другие вопросы по тегам