JSDo c как добавить члена в тип без создания новой typedef - PullRequest
1 голос
/ 05 февраля 2020

Возможно, у меня есть тип с именем A и B

/** 
 * @typedef A
 * @type {object}
 * @property {String} id this is id A
 * @property {String} name this is name A
 * @property {String} child_id this is id B
 */

/** 
 * @typedef B
 * @type {object}
 * @property {String} id this is id A
 * @property {Number} qty this is qty B
 */

Есть ли у меня что-то вроде

{
   id:"a",
   name:"a",
   B:{
     id: "b",
     qty:0
   }
}

без переписывания typedef?

У меня есть функция, возвращающая объект Sequelize, поэтому

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

В конце концов, я использовал & ключевое слово для пересечения

/** 
 * @typedef A
 * @type {object}
 * @property {String} id this is id A
 * @property {String} name this is name A
 * @property {String} child_id this is id B
 */

/** 
 * @typedef B
 * @type {object}
 * @property {String} id this is id A
 * @property {Number} qty this is qty B
 */

Я могу сказать в своем определении

@returns {A & { B : B }} 

или создать новый typedef

/** 
 * @typedef C
 * @type {object}
 * @property {A & {B:B}} B inside A relation
 */
0 голосов
/ 19 февраля 2020

Из моего прочтения вашего вопроса звучит так, что вы можете решить его, изменив 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 предоставляет помощь по типу

enter image description here

...