Art*_*yak 4 javascript flowtype
当我试图使这个注释Flowtype不检查类型
declare function MyType(x: number): void;
type PropsT = {
onClick?: MyType;
};
props.onClick && props.onClick(); // no check
Run Code Online (Sandbox Code Playgroud)
但这很有效.
type PropsT = {
onClick?: (x: number) => void;
};
props.onClick && props.onClick(); // ERROR
Run Code Online (Sandbox Code Playgroud)
问题 - 为什么?
在编写时declare function MyType,不要声明类型名称MyType,但声明MyType存在具有指定签名的函数.所以,MyType是一个价值,而不是一个类型.通常,当您使用值作为类型时,Flow将打印如下内容:
Ineligible value used in/as type annotation (did you forget 'typeof'?)
Run Code Online (Sandbox Code Playgroud)
唯一的例外是功能.Flow允许使用函数作为类型来支持旧样式类:
function Foo() {}
const foo: Foo = new Foo();
Run Code Online (Sandbox Code Playgroud)
不幸的是,这些类的行为大多是不安全的,Flow推断某些属性的类型,但将其他所有内容视为any.
长话短说,你需要补充typeof:
type PropsT = {
onClick?: typeof MyType;
};
Run Code Online (Sandbox Code Playgroud)