天天看點

如何了解 new (...args: any[]) => any

關于javascript:如何開始了解類型…args:any [])=> any

如何了解下面這段代碼裡的 new 操作?

/**

* 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;

}

我們逐漸分解。

() => any

該函數沒有輸入參數,傳回任意類型。

(…args: any[]) => any

…args: any[]使用的是Rest Parameters構造,該構造本質上表示可以提供any類型的任何數量的參數。因為存在數量未知的any參數,是以參數的類型是any的數組。

最後,把 new 關鍵字補上。

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

此處的new關鍵字指定可以将此函數視為類構造函數,并使用new關鍵字進行調用。

回到文章開頭的函數:

該函數是一個可以接受傳回類型any的任意數量的參數(類型為any的函數),并且可以用作帶有new關鍵字的構造函數。

看一個該函數具體消費的例子:

function isInstance(object: any, targetTypeConstructor: new (...args: any[]) => any) {

class Jerry{

 constructor(private name:string){

   this.name = name;

 }

const jerry: Jerry = new Jerry('Jerry');

console.log(isInstance(jerry, Jerry));

輸出:true

如何了解 new (...args: any[]) => any

Argument of type ‘typeof Jerry’ is not assignable to parameter of type ‘(…args: any[]) => any’.

Type ‘typeof Jerry’ provides no match for the signature ‘(…args: any[]): any’.

繼續閱讀