如何去理解`new(... args:any [])=> any`

问题描述 投票:2回答:4

我正在阅读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的任何想法?这是我第一次看到这种结构...

javascript typescript validation instanceof
4个回答
5
投票

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

首先,让我们将new从我们的思维中移开,并专注于定义的后一部分:

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

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

() => any

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

接下来我们可以在参数中添加回来:

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

...args: any[]正在使用“剩余参数”构造,该构造实质上表示可以提供给定类型any的任意数量的参数。由于any参数的数量未知,因此参数的类型为any的数组。

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

最后,我们可以添加回new关键字以获得:

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

此处的new关键字指定可以将此函数视为类构造函数,并使用new关键字进行调用。

这为我们提供了一个完整的图片,该函数是一个接受任意数量(返回any类型的参数)并返回类型any并可以与new关键字一起用作构造函数的函数] >。

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


2
投票

分解成碎片:


1
投票

意味着参数targetTypeConstructor是一个接受参数的函数,并且可以用作构造函数(可以与new关键字一起使用并创建实例)] >>。您可以传递不是abstracts >>。


1
投票
new (...args: any[]) => any

此类型指定一个函数,该函数接受any类型的任意数量的参数,返回any值,并且可以用new调用。

© www.soinside.com 2019 - 2024. All rights reserved.