如何理解 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 關鍵字去掉,反而會報錯:
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’.
更多Jerry的原創文章,盡在:“汪子熙”:
總結
以上是生活随笔為你收集整理的如何理解 new (...args: any[]) => any的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深天马 A:预计 2023 年内具备折叠
- 下一篇: 广东省-IT公司红黑榜排名