难以理解呼叫签名

  • 本文关键字:呼叫 typescript
  • 更新时间 :
  • 英文 :


如果这是一个有点愚蠢的问题,请道歉。我听说过一些关于 Typescript 中的呼叫签名,但我不完全了解它们的作用。打字稿文档说:

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

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

该文档没有给出任何关于您实际如何调用doSomething的示例(也没有我找到的有关该主题的任何资源),我对"可调用属性的东西"的含义感到困惑。(someArg: number): 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:数字):布尔值;到底是什么意思?看起来它正在定义一个返回类型为布尔值的函数,该函数采用一个名为 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);

DescableFunction 中的 (someArg: number): 布尔值意味着任何模仿 DescscribeableFunction 的函数都必须:

  1. 有一个带有类型号的参数
  2. 返回类型必须是布尔值

如果它满足这些条件,它现在有资格使用(对象)DescibleFunction属性。

为了使它能够担任对象的角色,它必须使用相应的类型定义对象的所有属性。从您的示例

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

假设函数"callable"想要充当对象,那么

const callable = (num) => {
return num > 5;
}

从上面的代码中,您可以看到可调用函数满足所需的前两个条件(即,它有一个带有类型号的参数和一个返回类型的布尔值)。接下来,它应该定义 DeschibiableFunction 的属性及其正确的类型。

callable.description = "Number is greater than 5";

现在,它已经满足了所有条件。接下来,我们调用函数 doSomething

doSomething(callable)

输出将是

Number is greater than 5 returned true

最新更新