Javascript 用于回调的Flowtype注释

Javascript 用于回调的Flowtype注释,javascript,flowtype,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 && p

当我尝试创建此注释时,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

问题-为什么?

当您编写
声明函数MyType
时,您没有声明类型名称
MyType
,但您声明存在具有指定签名的函数
MyType
。因此,
MyType
是一个值,而不是一个类型。通常,当您使用value作为类型时,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;
};