gpt4 book ai didi

javascript - JSDoc:如何记录具有动态和固定属性混合的对象?

转载 作者:行者123 更新时间:2023-12-04 04:26:01 24 4
gpt4 key购买 nike

假设我有这样的功能:

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也将返回 bool 值的属性。

如果它会返回,我可以简单地写:
/**
* @param {Object.<string, *>} obj
* @returns {{error: boolean}}
*/

但是现在它没有记录动态属性。

我能想到的做法是:
/**
* @param {Object.<string, *>} obj
* @returns {Object.<string, boolean>|{error: boolean}}
*/

虽然它有效,但对我来说它在语法上看起来并不正确。我无法使用 @typedef因为当我已经知道将使用什么属性时应该使用它。

我在 JSDoc's documentation 中找不到有关此问题的任何信息.

那么如何记录一个混合了动态和固定属性的对象呢?

最佳答案

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

/**
* @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;
}
代码补全示例
Code completion

关于javascript - JSDoc:如何记录具有动态和固定属性混合的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56000659/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com