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;
}
此函数将 return 一个对象,该对象的内容根据传递给函数的参数动态填充。
我可以像这样记录函数:
/**
* @param {Object.<string, *>} obj
* @returns {Object.<string, boolean>}
*/
但它没有记录动态 .error
属性 也将 return 一个布尔值。
如果就这样就可以了return,我可以简单的写:
/**
* @param {Object.<string, *>} obj
* @returns {{error: boolean}}
*/
但是现在它不记录动态属性。
我能想到的是:
/**
* @param {Object.<string, *>} obj
* @returns {Object.<string, boolean>|{error: boolean}}
*/
虽然它有效,但在我看来它在语法上不正确。我不能使用 @typedef
因为当我已经知道将使用什么 属性 时应该使用它。
中找不到有关此问题的任何信息
那么如何记录混合了动态和固定属性的对象?
您可以使用模板来做到这一点
/**
* @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;
}
代码完成示例
假设我有这样一个函数:
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;
}
此函数将 return 一个对象,该对象的内容根据传递给函数的参数动态填充。
我可以像这样记录函数:
/**
* @param {Object.<string, *>} obj
* @returns {Object.<string, boolean>}
*/
但它没有记录动态 .error
属性 也将 return 一个布尔值。
如果就这样就可以了return,我可以简单的写:
/**
* @param {Object.<string, *>} obj
* @returns {{error: boolean}}
*/
但是现在它不记录动态属性。
我能想到的是:
/**
* @param {Object.<string, *>} obj
* @returns {Object.<string, boolean>|{error: boolean}}
*/
虽然它有效,但在我看来它在语法上不正确。我不能使用 @typedef
因为当我已经知道将使用什么 属性 时应该使用它。
那么如何记录混合了动态和固定属性的对象?
您可以使用模板来做到这一点
/**
* @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;
}
代码完成示例