这是将变量/常量注释为包含特定类型函数的方法:
declare type TFunction = () => any;
const foo: TFunction = function foo() {};
一个声明函数时的语法是什么:
function boo() {}
答案 0 :(得分:1)
无法将: TFunction
放在function boo()
声明中。但是,您可以通过之后编写no-op语句(boo: TFunction);
来检查它。唯一的缺点是它在运行时评估boo
。
可能最好的方法是不要担心明确声明boo
是TFunction
,而只需依靠Flow来检查它boo
预计会TFunction
。
以下是我的意思的更具体的例子:(Try flow link)
/* @flow */
type ArithmeticOperation = (a: number, b: number) => number;
function add(a: number, b: number): number {
return a + b;
}
function concat(a: string, b: string): string {
return a + b;
}
function fold(array: Array<number>, operation: ArithmeticOperation): number {
return array.reduce(operation);
}
fold([1, 2, 3], add); // ok because add matches ArithmeticOperation
fold([1, 2, 3], concat); // flow error because concat doesn't match
答案 1 :(得分:0)
迟到这个问题,但是如果你在谈论&#34;编译时声明的意义上的声明,与使用declare
关键字&#34;的代码分开,那么每{ {3}},你应该能够像这样声明全局变量:
declare var boo: TFunction;
或作用域作为其包含模块或类型的成员:
declare class FunctionHolder {
boo: TFunction;
}