「File1.js」という名前のファイルがあるとします。このファイルでは、オブジェクトのオブジェクトをエクスポートし、各オブジェクトにtypedefを付けています。
/**
* My typedef for each object.
* @typedef {Object} MyObject1
* @property {String} username Your username
* @property {String} realname Your real name.
* @property {boolean} isUnique Are you unique as a person?
*/
module.exports = {
/**
* Person One!
* @type {MyObject1}
*/
myperson: {
username: 'TheDragonSlayer',
realname: 'George',
isUnique: true
},
/**
* Person Two!
* @type {MyObject1}
*/
myperson2: {
username: 'BobMagee',
realname: 'Bob',
isUnique: false
}
}
次に、「File2.js」という名前のファイルで、このオブジェクトをコンストラクターで参照し、新しいMyObject1
に設定します。
const persons = require('./File1.js');
class File2 {
constructor(options = {}) {
/**
* The person for this file.
* @type {MyObject1}
*/
this.person = options.person ? persons[options.person] : persons.myperson2;
}
}
module.exports = File2;
開発にはVisual Studio Codeを使用しているため、Ctrl + Spaceを押すとIntelliSenseが表示されます。ファイル1内で、私が人物オブジェクトを作成している間、IntelliSenseは、ユーザー名は文字列、実名は文字列、isUniqueはブール値であることを教えてくれます。しかし、file2に移動してthis.person
を介して新しく作成された人を参照すると、this.person.username
と入力すると、「ユーザー名:文字列」の期待される結果が得られません。
バニラNode.jsのFile2でtypedef MyObject1
を使用することはできますか、それとも不運ですか?
編集:いくつかの詳細情報を使用して、TypeScriptの@exportと@importを使用して回答を見つけることができました。これらはすべて役に立ちません。 File1.jsを@モジュールとしてマークしてmodule:mymodule~MyMethod
を実行することも試みましたが、そのたびにthis.personをメソッド自体ではなくNodeModuleとしてマークするだけでした。