在Flow中使用什么代替Function和Object类型

时间:2016-06-30 02:17:04

标签: javascript flowtype

Flow文档建议谨慎使用FunctionObject类型。如果是这样的话,我应该使用什么?以下是几个场景:

export function executeFunction(someFunc) {
  someFunc.call(this, 'whatever');
}

export function processThing(someObj) {
  // ...
}

注释这些的正确方法是什么? (注意:someObj可以是任何对象..它可能有许多方法和属性,我不想在注释中输入全部内容)

1 个答案:

答案 0 :(得分:1)

嗯,首先,因为你没有使用processThing的输出,我认为它什么都不返回,所以你可以为它添加一个注释:

export function processThing(someObj): void {

关于someObj ...您是否希望在传递和访问该对象时具有类型安全性?

否:考虑使用anymixedObject类型对其进行注释,具体取决于“any”的具体含义。

是的:您必须对其进行注释。您可以在线编写其类型,但您也可以在其他位置定义类型(包括在不同的文件中),并在需要时在多个位置重复使用。例如,像这样:

type Thing = {
  foo: string;
  bar: number;
}
// ...
export function processThing(someObj: Thing): void {

如果预期someObj是某个ES6类的实例,您也可以将该类用作类型(请参阅docs)。

对于executeFunction,您可以指定您希望接受Thing作为其第一个参数的函数,并且不返回任何内容:

export function executeFunction(someFunc: (something: Thing) => void) {