无法理解呼叫签名
如果这是一个愚蠢的问题,请道歉。我听说过一些关于 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
它是一个函数,因此您可以doSomething像fn(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);