gpt4 book ai didi

javascript - 如何理解类型 `new (...args: any[]) => any`

转载 作者:搜寻专家 更新时间:2023-10-30 22:06:20 26 4
gpt4 key购买 nike

我正在阅读 class-validator 的代码库,它有以下 isInstance 方法:

/**
* Checks if the value is an instance of the specified object.
*/
isInstance(object: any, targetTypeConstructor: new (...args: any[]) => any) {
return targetTypeConstructor
&& typeof targetTypeConstructor === "function"
&& object instanceof targetTypeConstructor;
}

关于如何理解类型 new (...args: any[]) => any 有什么想法吗?这是我第一次看到这种类型的结构......

最佳答案

让我们将类型缩减为更小、更容易理解的小块,然后重新构建完整的内容。

首先,让我们把new从脑海中抛开,专注于定义的后半部分:

(...args: any[]) => any

接下来让我们暂时忘记参数:

() => any

希望这是一个返回类型 any 的函数。

接下来我们可以在 args 中添加:

(...args: any[]) => any

...args: any[] 使用的是 Rest Parameters 构造,它本质上表示可以有任意数量的所提供类型 any 的参数。因为有未知数量的 any 参数,参数的类型是 any 的数组。

所以现在希望这是一个接受任意数量参数(any 类型)并返回类型 any 的函数。

最后我们可以加回new关键字得到:

new (...args: any[]) => any

这里的new关键字指定这个函数可以被当作一个类的构造函数,用new关键字调用。

这向我们展示了该函数是一个函数,它接受任意数量的参数(类型为any),返回类型为any,并且可以是用作带有 new 关键字的构造函数

在 API 上下文中,它实际上允许您将任何类构造函数传递给函数。

关于javascript - 如何理解类型 `new (...args: any[]) => any`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50726326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com