Zuerst definieren Sie eine Variable mit dem Namen DataService
, und Sie erhalten ein leeres Objekt. Danach weisen Sie dem Objekt module.exports
den Wert der Variablen DataService
zu, die ein leeres Objekt ist. Schließlich überschreiben Sie das Objekt module.exports
mit einem leeren Objekt, das jedoch direkt definiert ist. Es wird dasselbe Verhalten haben, da in beiden Fällen das Objekt dieselben Daten hat, was ein leeres Objekt ist.
Der Variablenname DataService
wird als Verweis auf das leere Objekt im lokalen Namespace verwendet. Weisen Sie dem Objekt module.exports
einen Wert zu, geben Sie ihm die Daten der Variablen und nicht den Namen. Zum Beispiel, wenn Sie das Modul nutzen wollen, werden Sie es benötigen,
var dataService = require('./data-service');
Wenn DataService
ein Objekt wurde, dann könnte man seine Eigenschaften zugreifen
var example = dataService.example;
Aber in Ihrem Fall dataService
ist direkt ein leeres Objekt, kein DataService
Objekt. So kann man nicht
var example = dataService.DataService ;
Ich habe bereits versucht, die Bibliothek zu registrieren, das ist auch erforderlich, damit der Hack funktioniert. Aber ohne diese 2 Zeilen, keine Intellisense. Ich werde akzeptieren, weil die erste Frage beantwortet wird. Aber mit welcher Art von Magie beginnt Webstorm intellisense aufgrund dieses Hacks mit DataService-Typ zu arbeiten? – supafly
Denken Sie daran, dass der einzige __type__, den Sie für Ihre Variable haben, "Objekt" ist. Intellisense basiert auf Namenskonventionen. Ich habe meine Antwort aktualisiert – goofballLogic