jsdoc typedef 中的动态键

J'e*_*J'e 15 jsdoc typescript

jsdoc typedef 中是否可以有动态键(道具名称)?我想象这看起来像下面的例子(它不起作用)。

@typedef {Object} Foo
@property {string} bar
@property {*} *
Run Code Online (Sandbox Code Playgroud)

传递未在 typedef 中列出的属性e.g. {baz: 0}会使打字稿感到不安,例如,

'{ bar: string; 类型的参数 巴兹:数字;}' 不能分配给 'Foo' 类型的参数。对象字面量只能指定已知属性,而 'baz' 不存在于类型 'Foo' 中


使用@jcalz 提出的方法Object.<string, *>似乎更接近理想的输出,但导致了奇怪的输出

@typedef {Object} Foo
@property {number} bar
@property {Object.<string, *>}
Run Code Online (Sandbox Code Playgroud)

输出:

type Foo = {
    bar: number;
    (Missing): {
        [x: string]: any;
    };
}
Run Code Online (Sandbox Code Playgroud)

cap*_*ian 5

您还可以在 JSDOC 中使用普通的 TS 语法。

请参阅下一个示例:

/**
 * 
 * @param {Record<string, string> & {bar:string}} arg
 */
const foo = (arg) => {}
Run Code Online (Sandbox Code Playgroud)

您甚至可以使用实用程序类型:

/**
 * 
 * @param {Partial<{age:number}>} arg 
 */
const partial = (arg) => { }
Run Code Online (Sandbox Code Playgroud)

您可以在这里找到更多实用程序