如何使用Flow键入提示es6方法作为查找

时间:2018-06-05 07:43:04

标签: ecmascript-6 find flow type-hinting

我试图输入像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返回一个undefined / bool值而不是我真正想要的类型...

知道如何管理这个吗? 我尝试使用像这样的界面,但它仍然不起作用:

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

1 个答案:

答案 0 :(得分:0)

您对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]

HeroHero | void的简单更改通过了流量检查:

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

假设heroes数组为空,而find()返回undefinedvoid),这是正确的。

选中Try Flow