簡體   English   中英

如何在 JSDoc 中使用 Function 類型注釋 object 類型,該類型具有可變數量的 arguments?

[英]How to annotate an object with Function type that has variable number of arguments in JSDoc?

我得到以下代碼:

/**
 * @type {function(boolean, string, ...*):void}
 */
exports.warn = createMacro(macro)

warn是一個 function,其簽名為 (arg1, arg2, ...arg3)。 當我嘗試在其他地方使用此方法時,WebStorm 和 VSCode 抱怨說,需要第三個參數而不是可選的

IDE中帶下划線的代碼

根據此注釋生成.d.ts文件時,簽名是正確的: arg0: boolean, arg1: string, ...args: any[]如何修改注釋以便 IDE 不會抱怨缺少參數?

通過使用 @type 的內聯 function 定義,我找不到解決go問題的方法。 但是,有幾個替代方案有一些缺點,您可以考慮。

第一種方式使用 JSDoc 語法,並且應該與任何讀取它的工具兼容。 我首先聲明了一個@callback function 類型,然后將變量的類型設置為它。 通過將最后一個參數名稱括在括號中,該參數將變為可選,並且應該可以清除您的錯誤。

/**
 * @callback WarnFunc
 * @param {boolean} arg1
 * @param {string} arg2
 * @param {...*} [restParam]
 * @returns void
 */
/** @type WarnFunc*/
exports.warn = createMacro(macro);

上面的問題是它比你以前的要冗長得多。 TypeScript 支持在 TypeScript 語法和 JSDoc 中定義的類型參數。 因此,如果維護 JSDoc 的語法不是優先事項,那么以下方式應該可以工作並且更簡潔:

/**
 * @type {(arg1: boolean, arg2: string, ...restArgs: string[]) => void}
 */
exports.warn = createMacro(macro);

當我這樣做時,我沒有收到任何錯誤,但restArgs參數也沒有顯示為可選。 因此,如果您仍有問題,可以明確地將 rest 參數設為可選。 當我嘗試它時它似乎工作,雖然它不是有效的 TypeScript 語法。

@type {(arg1: boolean, arg2: string, ...restArgs?: string[]) => void}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM