Is it possible to have dynamic keys (prop names) in a jsdoc typedef? I'm imagining this would look something like the example below (which does not work).
@typedef {Object} Foo
@property {string} bar
@property {*} *
Passing properties not listed in the typedef e.g. {baz: 0}
makes typescript upset with something like,
Argument of type '{ bar: string; baz: number; }' is not assignable to parameter of type 'Foo'. Object literal may only specify known properties, and 'baz' does not exist in type 'Foo'
Object.<string, *>
seems closer to the ideal output but resulted in a strange output
@typedef {Object} Foo
@property {number} bar
@property {Object.<string, *>}
output:
type Foo = {
bar: number;
(Missing): {
[x: string]: any;
};
}
You can also use normal TS syntax in JSDOC.
See next example:
/**
*
* @param {Record<string, string> & {bar:string}} arg
*/
const foo = (arg) => {}
You can even use utility types:
/**
*
* @param {Partial<{age:number}>} arg
*/
const partial = (arg) => { }
You can find more utils here
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With