Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSDoc包含来自另一个@typedef对象的所有属性_Javascript_Jsdoc - Fatal编程技术网

Javascript JSDoc包含来自另一个@typedef对象的所有属性

Javascript JSDoc包含来自另一个@typedef对象的所有属性,javascript,jsdoc,Javascript,Jsdoc,如果我使用JSDoc创建两个对象,其中一个对象具有另一个对象的所有属性,我如何显示它们 例如,您将拥有: /** * @typdef Foo * @type {Object} * @property {string} bar * @property {string} baz */ /** * @typedef Foobar * @type {Object} * @property {float} value * @property {string} bar * @prop

如果我使用JSDoc创建两个对象,其中一个对象具有另一个对象的所有属性,我如何显示它们

例如,您将拥有:

/** 
 * @typdef Foo
 * @type {Object}
 * @property {string} bar
 * @property {string} baz
 */

/**
 * @typedef Foobar
 * @type {Object}
 * @property {float} value
 * @property {string} bar
 * @property {string} baz
 */

但我不想写两次bar/baz,我只想继承它。

我相信你会这么做

/** Type definition for Foo.
 * @typdef {Object} Foo
 * @property {string} bar
 * @property {string} baz
 */

/** Type definition for Foobar.
 * @typedef {Foo} Foobar
 * @property {float} value
 */

注意
Foobar
是如何“继承”自
Foo

的。您可以制作一个简单的jsdoc插件,这样就可以在
typedef
上使用
@augments
/
@extends
。例如,可以找到这样一个插件(如下所示):

此时,您可以执行以下操作:

/** 
 * @typdef Foo
 * @type {Object}
 * @property {string} bar
 * @property {string} baz
 */

/**
 * @typedef Foobar
 * @type {Object}
 * @augments Foo
 * @property {float} value
 */

如果愿意,您可以修改模板以显示继承属性与非继承属性不同():

很好的示例!一个小的改进:代替
javascript prop.inherited=prop.inherited | | augmentName
最好使用
javascript prop.inherited=true;prop.inherits=prop.inherits | | augmentName。。。和
javascript prop=Object.assign(prop)
可能应该更改为
javascript prop=Object.assign({},prop)复制粘贴您的示例。VSCode报告:
typefoobar={bar:string;baz:string;}
/** 
 * @typdef Foo
 * @type {Object}
 * @property {string} bar
 * @property {string} baz
 */

/**
 * @typedef Foobar
 * @type {Object}
 * @augments Foo
 * @property {float} value
 */