作为类实例的函数参数的流类型

时间:2019-01-08 23:42:36

标签: flowtype

给出:

// @flow

declare interface IFoo {
    test();
}

class Foo implements IFoo {
    test () {
        console.log('in test');
    }
}

如果我有一个功能:

// some function
async function demo (argA: string, argB: INSTANCE_OF_Foo) { ... }

我如何告诉流程argB是“实现IFoo的类的实例”?换句话说,如果函数demo的用法必须像

const foo: IFoo = new Foo();
demo('bla' foo);

如何确保传递给demo的是实现IFoo的类的实例?

2 个答案:

答案 0 :(得分:0)

类型脚本接口在运行时会被忽略,它仅在编译时用于类型检查。因此,您无法检查Foo是否用IFoo实现。 但是您可以检查foo是否是Foo类的实例。

答案 1 :(得分:0)

因此,这取决于您要查找的内容:您可以确保该参数实现IFoo

async function demo (argA: string, argB: IFoo)

,或者参数是类Foo的实例:

async function demo (argA: string, argB: Foo)

但是我必须说,还不清楚为什么需要一个实例而不是一个接口(我认为这是解决问题的方法)。

您可以在flow.org/try上轻松地玩这个游戏。

希望这会有所帮助!