2017-08-04 105 views
2

我使用Node.js的兩個模塊和一個腳本,取決於他們:JSDoc類型返回類實例

的lib/Bar.js

module.exports = class Bar { 
    // .. 
}; 

的lib /美孚。 JS

const Bar = require('./Bar.js'); 

module.exports = class Foo { 
    /** 
    * @return {Bar} A Bar instance 
    */ 
    get someBar() { 
    return new Bar(); 
    } 
}; 

main.js

const Foo = require('./lib/Foo.js'); 

checkFoo(new Foo()); 

/** 
* @param {Foo} foo A Foo instance 
*/ 
function checkFoo(foo) { 
    foo. // I get suggestions for Foo properties 
    foo.someBar. // I get suggestions for Bar properties 

    checkBar(foo.someBar); 
} 

/** 
* @param {Bar} bar a Bar instance 
*/ 
function checkBar(bar) { 
    bar. // I get no suggestions! 
} 

我的代碼編輯器Visual Studio代碼使用智能感知提供有關Foo和Bar性能,這爲foo類型被聲明爲Foo對象checkFoo方法內正常工作的用戶的建議,並foo.someBar的類型聲明在Foo類中作爲Bar對象。

但是,只要我將此Bar實例傳遞給另一個方法(checkBar),Bar類型就不會被識別(可能是因爲我不需要該模塊)。 在JSDoc中是否有一個特殊的語法來指定一個類型在另一個模塊中聲明?或者這只是VSCode的問題?

+0

這是否幫助HTTP:// usejsdoc。 org/tags-typedef.html? – Lazyexpert

+0

@Lazyexpert不幸的是,沒有。 Bar中的所有屬性都記錄在有效的JSDoc註釋中,並且在'checkFoo'方法中顯示的建議中,該引用確實有效。我只想知道如何獲得'checkBar'中的建議。 –

回答

2

您的懷疑是正確的。目前,您還需要導入Bar在jsdoc使用它的類型:

const Foo = require('./lib/Foo.js'); 
const Bar = require('./lib/Bar.js'); 

... 

/** 
* @param {Bar} bar a Bar instance 
*/ 
function checkBar(bar) { 
    ... 
} 

我們正在跟蹤支持A JSDoc相當於requireimport這裏:https://github.com/Microsoft/TypeScript/issues/14377