Из моего прочтения вашего вопроса звучит так, что вы можете решить его, изменив typedef для A
примерно так, учитывая ожидаемый вами выходной объект.
/**
* @typedef A
* @type {object}
* @property {String} id this is id A
* @property {String} name this is name A
* @property {B} type B
*/
/**
* @typedef B
* @type {object}
* @property {String} id
* @property {Number} qty
*/
Если вам не нужно поле, которое Speci c ссылается на идентификатор дочернего B
объекта? И вы не хотите явно определять дочерние B
отношения по какой-то причине. В этом случае вы можете сделать это и указать B
в качестве необязательного.
/**
* @typedef A
* @type {object}
* @property {String} id this is id A
* @property {String} name this is name A
* @property {String} idOfB - A string that holds the id from B
* @property {B} [B] - Notice the square brackets, this makes it an optional property.
*/
Вот как выглядит результирующий JSDo c, когда VSCode предоставляет помощь по типу