Javascript 用于回调的Flowtype注释
当我尝试创建此注释时,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
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;
};