如果设置为接口属性,()是什么意思?

What does () mean if set as a interface property?

在 Vue.js 源代码 (packages/reactivity/src/effects.ts) 中,我发现了这个:

export interface ReactiveEffectRunner<T = any> {
  (): T
  effect: ReactiveEffect
}

代码中的()是什么意思?

表示该类型可以作为函数执行。

例如:

declare const fn: ReactiveEffectRunner<{ abc: number }>

const result = fn() // { abc: number }
fn.effect // ReactiveEffect

Playground

当您想要定义具有其他属性的函数时,您可以使用此模式。

()表示实现该接口的对象将是一个可以调用的函数,不需要任何参数。

effect表示它还有一个属性调用的效果。

文档中的示例:

type DescribableFunction = {
  description: string;
  (someArg: number): boolean;
};
function doSomething(fn: DescribableFunction) {
  console.log(fn.description + " returned " + fn(6));
}

了解 call signatures