考虑以下设置,
/**
* @typedef {generalObject} GeneralObject
* @type {Object}
* @property {Object} generalField
*/
var generalObject = {
generalField : {}
};
/**
* @typedef {specificObject} SpecificObject
* @type {GeneralObject}
* @extends {GeneralObject}
* @property {Object} foobar
*/
var specificObject = Object.create(generalObject, {
specificField : {
value : {}
}
});
/**
* @typedef {exampleContainer} Container
* @type {Object}
* @property {GeneralObject} object1
*/
var exampleContainer = {
object1 : Object.create(generalObject)
};
我们有一个容器,其字段类型为GeneralObject
,SpecificObject
类型为GeneralObject
。现在,具有以下功能:
/**
* @param {Container} container
*/
function doSomething(container) {
container.object1.//Auto-completed with 'generalField'
}
/**
* @param {Container} container
* @param {SpecificObject} container.object1
*/
function doSomethingSpecific(container) {
container.object1.//Not auto-completed with 'specificField'
}
doSomething
函数需要一个经典容器并且工作正常,但doSomethingSpecific
函数希望container.object1
为SpecificObject
类型,同时保留Container
的其余部分1}}类型。
正如评论所说,WebStorm的自动完成功能不会将container.object1
识别为SpecificObject
,而是识别为GeneralObject
。
有没有办法获得这种行为?如果是这样,用正确的方法覆盖第一个@param
和第二个{?p>