NEWS
Typprüfung mit javascript.d.ts
-
Hallo,
ich hab auch noch mal eine Frage…
Wenn ich am Anfang der Datei die Referenz auf die Definitionsdatei setze
///
klappt das im VS Code super, aber im IOBroker Admin bekomme ich beim Compilieren dann natürlich einen Fehler:
12:40:00.730 [error] javascript.0 script.js.common.xTest_ts: TypeScript compilation failed: /// ^ ERROR: File '/opt/iobroker/node_modules/iobroker.javascript/common/javascript.d.ts' not found.
Daher muss ich das vorher immer bearbeiten (mache aus den /// ein ////) oder habe Pech - wenn ich das vergesse. Da ich mit dem "js2fs" plugin arbeite muss ich das immer vor jedem Speichern im VS Code machen - wo das vergessen schon mal häufiger passiert.
Gibt es hier einen besseren Weg?
Danke & Gruß
Robert
-
Du arbeitest scheinbar mit TypeScripts.
Der TypeScript-Modus lädt die Datei automatisch für dich, da sie bereits in den JavaScript-Adapter integriert ist und TypeScript zwangsläufig diese Definitionen benötigt.
Du musst VSCode nur beibringen, dass es sich bei deiner Ordnerstruktur um ein Projekt handelt. Das geht mit einer leeren tsconfig.json im Hauptordner, danach werden .d.ts-Dateien automatisch eingebunden:
Besser ist natürlich eine passende tsconfig.json, z.B. für NodeJS 4+{ "compilerOptions": { "target": "es5", "lib": [ "es6", ] }, }
-
Danke, werde ich heute Abend ausprobieren.
-
Schau dir mal meinen Screenshot bzw. javascript.d.ts genau an. Auch diese Datei muss in ein Modul "gezwungen" werden. Anders als bei JS reicht require nicht aus, es muss das import keyword fallen.
// entweder so import * as fs from "fs"; // oder so import fs = require("fs"); ```` `
Verrückt. kaum macht man es richtig, funktioniert es. Nun ja, fast
Beim Testordner mit der Funktion abc() funktioniert es nun einwandfrei.
Nur mein eigentlicher Arbeitsbereich macht die Selben Probleme, wie oben beschrieben.
Dort werden die Funktionen zwar erkannt, die Parameter aber weiterhin mit any angezeigt und ohne Beschreibung.
Zur Eingrenzung habe ich dann meine globale Typedatei in den Testordner mit der abc() Funktion kopiert.
Hier funktionieren die Funktionen aus der globalen Datei auch einwandfrei.
Zur weiteren Eingrenzung habe ich dann auch die jsonconfig.json in den Testordner kopiert, um sicherzustellen, dass die Probleme nicht durch diese Datei kommen. Auch hier funktioniert es einwandfrei.
Problem gefunden
argh… während ich das hier tippe habe ich dann noch den Ordner global mit den globalen Skripten in den Testordner reinkopiert.
In diesem Moment funktioniert es nicht mehr sauber. :oops:
Die globalen Funktionen haben noch nicht das
require("fs");
am Anfang des Skripts.Werde dann jetzt erst einmal alle Skripte mit dem
require("fs");
versehen... sind ein paar...Danke für Deine Mühe!!!
-
Danke, bei mir funktioniert es prinzipiell.
Jetzt habe ich jedoch ein anderes Problem festgestellt:
Das fehlt in der javascript.d.ts tatsächlich.
In der Doku steht: "Same as javascript setTimeout."
-
Das fehlt in der javascript.d.ts tatsächlich.
In der Doku steht: "Same as javascript setTimeout." `
Korrekt, das kommt auch nicht in die javascript.d.ts, da es sich um Grundfunktionalität handelt. Dein Problem scheint aufzutreten, wenn im Ordner eine tsconfig.json existiert. Warum auch immer.Beheben kannst du es, indem du die NodeJS-Typings im Arbeitsbereich installierst.
npm i @types/node
für die neueste Version, bzw.
npm i @types/node@4
für NodeJS 4.
-
Wen es interessiert, ich habe den VSCode-Editor ("Monaco") in den Skriptadapter eingebaut.
Das ganze benötigt noch ein wenig Arbeit, da insbesondere der Wechsel von Blockly zu JS nicht funktioniert. Aber wer das nicht benötigt, darf gerne schon mal testen:
Installation aus eigener URL: https://github.com/AlCalzone/ioBroker.j … ter-editor
--
–
–
-
Super Sache!
Ich vermute mal das ist unabhängig vom Editor. Mit der Version 3.7.0 des Javascript Adapters funktionieren jetzt leider meine Scripte alle nicht. Es kommt beim Starten überall der Fehler "ReferenceError: exports is not defined":
javascript.0 2018-05-18 20:19:02.802 error at ContextifyScript.Script.runInContext (vm.js:35:29) javascript.0 2018-05-18 20:19:02.802 error at script.js.common.Status.Stauberechnung_ts:2:23 javascript.0 2018-05-18 20:19:02.802 error ReferenceError: exports is not defined javascript.0 2018-05-18 20:19:02.802 error ^ javascript.0 2018-05-18 20:19:02.802 error Object.defineProperty(exports, "__esModule", { value: true }); javascript.0 2018-05-18 20:19:02.800 error script.js.common.Status.Stauberechnung_ts: script.js.common.Status.Stauberechnung_ts:2 javascript.0 2018-05-18 20:19:02.796 info script.js.common.Status.Stauberechnung_ts: TypeScript compilation successful javascript.0 2018-05-18 20:19:02.686 info script.js.common.Status.Stauberechnung_ts: compiling TypeScript source... javascript.0 2018-05-18 20:19:02.686 error at ContextifyScript.Script.runInContext (vm.js:35:29) javascript.0 2018-05-18 20:19:02.685 error at script.js.common.Status.TüreFenster_ts:2:23 javascript.0 2018-05-18 20:19:02.685 error ReferenceError: exports is not defined javascript.0 2018-05-18 20:19:02.685 error ^ javascript.0 2018-05-18 20:19:02.685 error Object.defineProperty(exports, "__esModule", { value: true }); javascript.0 2018-05-18 20:19:02.685 error script.js.common.Status.TüreFenster_ts: script.js.common.Status.TüreFenster_ts:2 javascript.0 2018-05-18 20:19:02.680 info script.js.common.Status.TüreFenster_ts: TypeScript compilation successful javascript.0 2018-05-18 20:19:02.501 info script.js.common.Status.TüreFenster_ts: compiling TypeScript source... javascript.0 2018-05-18 20:19:02.501 error at ContextifyScript.Script.runInContext (vm.js:35:29) javascript.0 2018-05-18 20:19:02.501 error at script.js.common.System.AlarmControl_ts:2:23 javascript.0 2018-05-18 20:19:02.501 error ReferenceError: exports is not defined javascript.0 2018-05-18 20:19:02.501 error ^ javascript.0 2018-05-18 20:19:02.500 error Object.defineProperty(exports, "__esModule", { value: true }); javascript.0 2018-05-18 20:19:02.489 error script.js.common.System.AlarmControl_ts: script.js.common.System.AlarmControl_ts:2 javascript.0 2018-05-18 20:19:02.486 info script.js.common.System.AlarmControl_ts: TypeScript compilation successful javascript.0 2018-05-18 20:19:02.420 info script.js.common.System.AlarmControl_ts: compiling TypeScript source...
Hab mal ein Issue auf https://github.com/ioBroker/ioBroker.javascript/issues/118 eröffnet.
-
-
Danke!