簡體   English   中英

JSDoc:如何記錄混合了動態和固定屬性的對象?

[英]JSDoc: How to document an object with mix of dynamic and fixed properties?

假設我有一個像這樣的函數:

function validator(obj){
  const ret = {};

  for (const key in obj){
    // Returns a boolean
    result = validate(key, obj[key]);

    if (result !== true)
      ret.error = true;

    ret[key] = result;
  }

  return ret;
}

這個函數將返回一個對象,對象的內容根據傳遞給函數的參數動態填充。

我可以像這樣記錄函數:

/**
 * @param {Object.<string, *>} obj
 * @returns {Object.<string, boolean>}
 */

但它沒有記錄也將返回布爾值的動態.error屬性。

如果它會返回,我可以簡單地寫:

/**
 * @param {Object.<string, *>} obj
 * @returns {{error: boolean}}
 */

但是現在它沒有記錄動態屬性。

我能想到的事情是這樣的:

/**
 * @param {Object.<string, *>} obj
 * @returns {Object.<string, boolean>|{error: boolean}}
 */

雖然它有效,但在我看來它在語法上並不正確。 我不能使用@typedef因為當我已經知道將使用什么屬性時應該使用它。

我在JSDoc 的文檔中找不到關於這個問題的任何信息。

那么我如何記錄一個混合了動態和固定屬性的對象呢?

您可以使用模板執行此操作

/**
 * @template {Object<string,any>} T
 * @param {T} obj
 */
function validator(obj){
    /** @type {T & {error?: Boolean}} */
    const ret = {};
  
    for (const key in obj){
      // Returns a boolean
      const result = validate(key, obj[key]);
  
      if (result !== true)
        ret.error = true;
  
      ret[key] = result;
    }
  
    return ret;
  }

代碼完成示例

代碼補全

暫無
暫無

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

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