回调的Flowtype注释

时间:2016-09-24 02:18:44

标签: javascript flowtype

当我尝试进行此注释时,Flowtype不会检查类型

declare function MyType(x: number): void;
type PropsT = {
  onClick?: MyType;
};

props.onClick && props.onClick(); // no check

但这很有效。

type PropsT = {
  onClick?: (x: number) => void;
};
props.onClick && props.onClick(); // ERROR

问题 - 为什么?

1 个答案:

答案 0 :(得分:6)

当您编写declare function MyType时,您不会声明类型名称MyType,但您声明存在具有指定签名的函数MyType。因此,MyType是一个值,而不是一个类型。通常,当您使用值作为类型时,Flow将打印如下内容:

Ineligible value used in/as type annotation (did you forget 'typeof'?)

唯一的例外是功能。 Flow允许使用函数作为类型来支持旧样式类:

function Foo() {}
const foo: Foo = new Foo();

不幸的是,这些类的行为大多不安全,Flow推断某些属性的类型,但将其他所有内容视为any

长话短说,您需要添加typeof

type PropsT = {
  onClick?: typeof MyType;
};