函数声明中可重用函数类型的语法

时间:2016-12-18 20:10:16

标签: flowtype

这是将变量/常量注释为包含特定类型函数的方法:

declare type TFunction = () => any;
const foo: TFunction = function foo() {};

一个声明函数时的语法是什么:

function boo() {}

2 个答案:

答案 0 :(得分:1)

无法将: TFunction放在function boo()声明中。但是,您可以通过之后编写no-op语句(boo: TFunction);来检查它。唯一的缺点是它在运行时评估boo

可能最好的方法是不要担心明确声明booTFunction,而只需依靠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;
}