无法理解呼叫签名

如果这是一个愚蠢的问题,请道歉。我听说过一些关于 Typescript 中调用签名的信息,但我不明白它们到底是做什么的。打字稿文档说:

在 JavaScript 中,函数除了可调用之外还可以有属性。但是,函数类型表达式语法不允许声明属性。如果我们想用属性来描述一些可调用的东西,我们可以在对象类型中写一个调用签名:

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

该文档没有提供任何关于您如何实际调用的示例doSomething(也没有我在该主题上找到的几乎任何资源),我对“可调用的属性”的含义感到困惑。到底(someArg: number): boolean;是什么意思?看起来它定义了一个返回类型为 boolean 的函数,该函数接受一个名为 的数字参数someArg,但传入一个函数并没有做任何事情。那么……到底是什么意思?同样,我研究了调用签名,但我发现的所有内容几乎都只是说“调用签名详细描述了函数”,这不是很有帮助。究竟什么呼号?

回答

你实际上会如何调用 doSomething

它是一个函数,因此您可以doSomethingfn(6)调用任何函数一样调用它(从内部或外部):这是调用它的一个示例。

我对“可调用的属性”是什么意思感到困惑

函数是 JavaScript 中的一种特殊对象,任何对象都可以拥有与之关联的任意键值对。看到它通常很奇怪,但有可能:

const myFn = (someArg) => {
  return someArg > 5;
};
myFn.description = 'checks if arg is greater than 5';

console.log(myFn(10));
console.log(myFn.description);

这是在纯 JavaScript 中。TypeScript 的工作方式相同,只是您需要正确键入内容。

究竟是什么 (someArg: number): boolean; 意思?看起来它定义了一个返回类型为布尔值的函数,它接受一个名为 someArg 的数字参数,

非常正确。

但是传入一个函数并没有做任何事情

这应该。这是 JS 中的一个例子:

const myFn = (someArg) => {
  return someArg > 5;
};
myFn.description = 'checks if arg is greater than 5';


function doSomething(fn) {
  console.log(fn.description + " returned " + fn(6));
}


doSomething(myFn);


以上是无法理解呼叫签名的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>