天天看點

如何了解 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) {
    return targetTypeConstructor
        && typeof targetTypeConstructor ==="function"
        && object instanceof targetTypeConstructor;
}

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

如果把 new 關鍵字去掉,反而會報錯:

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

繼續閱讀