当我尝试进行此注释时,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
问题 - 为什么?
答案 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;
};