【发布时间】:2021-06-09 13:17:39
【问题描述】:
我正在尝试注释作为函数参数的对象的属性。
具体来说,我希望在将鼠标悬停在函数定义上时,options.length 解释出现在 vscode 中。
/**
* Memoize a function
* @param {(...fnArgs: T[]) => U} fn The function to memoize
* @param {Object} options Memoization options
* @param {number} options.max The max size of the LRU cache
* @param {number | undefined} options.length The response will be cached
* by the first N args, based on this value. Trailing args will still be
* passed to the underlying function but will be ignored during memoization.
*/
export const memo = <T, U>(
fn: (...fnArgs: T[]) => U,
{ max, length }: { max: number; length?: number }
) => {
const cachedArgs: T[][] = []
const cachedValues: U[] = []
const get = (args: T[]): U | undefined => {
const index = cachedArgs.findIndex(x => argsAreEqual(x, args, length))
if (index === -1) return
onUsed(index)
return cachedValues[index]
}
const set = (args: T[], value: U) => {
cachedArgs.push(args)
cachedValues.push(value)
}
const onUsed = (index: number) => {
moveToEnd(index, cachedArgs)
moveToEnd(index, cachedValues)
}
const prune = () => {
if (cachedArgs.length >= max) {
cachedArgs.shift()
cachedValues.shift()
}
}
return (...args: T[]) => {
let value = get(args)
if (value) return value
prune()
value = fn(...args)
set(args, value)
return value
}
}
将鼠标悬停在类型签名上时,我得到以下信息
@param fn — The function to memoize
@param options — Memoization options
我已尽我所能 copy from the docs,但它没有显示 options.length 的解释。
我希望它解释options.length 参数的工作原理。我该怎么做?
额外的问题,不知道如何使泛型与 jsdoc 一起工作...帮助@template 非常感谢!
【问题讨论】:
-
我从未使用过此功能,但也许您可以使用
@prop或@property代替,例如this? -
啊,这显然是一个已知的错误:microsoft/TypeScript#24746,其中列出了可能的解决方法。或者可能只是 TS 代码不支持它,如 microsoft/TypeScript#11859
-
this 解决方法对您有用吗?我不知道为什么
Object会阻止@param工作,但相关问题似乎表明这会发生。 -
太棒了!如果你写一个答案将尽快批准。否则很高兴自己获得荣誉并写下答案!呵呵 ???? @jcalz
标签: typescript visual-studio-code jsdoc