Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Hilfe bei Strukturierung von Klassen in TypeScript

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.8k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    887

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Hilfe bei Strukturierung von Klassen in TypeScript

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
29 Beiträge 6 Kommentatoren 2.0k Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • U uwe72

    @fastfoot

    Ja, meine Funktion heißt schon so. Meiner Meinung nach komme ich leider gar nicht so weit diese Funktion/Methode aufzurufen.

    require liefert irgendwie nichts zurück. Das File (test.ts) wird aber nun grundsätzlich gefunden.

    Als ehemaliger Java-Entwickler ;-) würde ich so was in der Art schreiben:

    634d028b-2be0-4e0c-9b4a-f6885dfaa9be-image.png

    Kommen aber viele Fehler:
    d73c6751-1e1a-44b7-bc8c-d56d87fc14ff-image.png

    AlCalzoneA Offline
    AlCalzoneA Offline
    AlCalzone
    Developer
    schrieb am zuletzt editiert von
    #15

    @uwe72 sagte in Hilfe bei Strukturierung von Klassen in TypeScript:

    Da Dateiname (class) auf TS hinweist

    Wieso weist das auf TS hin? class ist seit ES6 ein JS-Feature.

    Ich blicke nicht ganz ob ihr das Problem schon gelöst habt, aber hast du schon die import-Syntax versucht?

    import { Test } from "../pfad/zum/skript";
    const myInstance = new Test(3, 5);
    //...
    

    Abgesehen davon müssen relative Pfade relativ zum sandbox.js-Modul vom Adapter sein, welches in /opt/iobroker/node_modules/iobroker.javascript/lib liegt. Deshalb zeigt @Xenon's Import auch auf /opt/iobroker/test/class.js und nicht dahin wo die Datei wirklich liegt.

    Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

    XenonX 1 Antwort Letzte Antwort
    0
    • AlCalzoneA AlCalzone

      @uwe72 sagte in Hilfe bei Strukturierung von Klassen in TypeScript:

      Da Dateiname (class) auf TS hinweist

      Wieso weist das auf TS hin? class ist seit ES6 ein JS-Feature.

      Ich blicke nicht ganz ob ihr das Problem schon gelöst habt, aber hast du schon die import-Syntax versucht?

      import { Test } from "../pfad/zum/skript";
      const myInstance = new Test(3, 5);
      //...
      

      Abgesehen davon müssen relative Pfade relativ zum sandbox.js-Modul vom Adapter sein, welches in /opt/iobroker/node_modules/iobroker.javascript/lib liegt. Deshalb zeigt @Xenon's Import auch auf /opt/iobroker/test/class.js und nicht dahin wo die Datei wirklich liegt.

      XenonX Offline
      XenonX Offline
      Xenon
      Forum Testing Developer
      schrieb am zuletzt editiert von
      #16

      @alcalzone sagte in Hilfe bei Strukturierung von Klassen in TypeScript:

      Abgesehen davon müssen relative Pfade relativ zum sandbox.js-Modul vom Adapter sein, welches in /opt/iobroker/node_modules/iobroker.javascript/lib liegt. Deshalb zeigt @Xenon's Import auch auf /opt/iobroker/test/class.js und nicht dahin wo die Datei wirklich liegt.

      Das bedeutet nun genau? Wenn die Datei unter opt/iobroker/test/class.js liegt, was muss ich dann im import angeben, damit er nicht in den node_modules sucht?

      wenn euch mein Beitrag geholfen hat, bewertet ihn bitte unten rechts :)

      AlCalzoneA 1 Antwort Letzte Antwort
      0
      • XenonX Xenon

        @alcalzone sagte in Hilfe bei Strukturierung von Klassen in TypeScript:

        Abgesehen davon müssen relative Pfade relativ zum sandbox.js-Modul vom Adapter sein, welches in /opt/iobroker/node_modules/iobroker.javascript/lib liegt. Deshalb zeigt @Xenon's Import auch auf /opt/iobroker/test/class.js und nicht dahin wo die Datei wirklich liegt.

        Das bedeutet nun genau? Wenn die Datei unter opt/iobroker/test/class.js liegt, was muss ich dann im import angeben, damit er nicht in den node_modules sucht?

        AlCalzoneA Offline
        AlCalzoneA Offline
        AlCalzone
        Developer
        schrieb am zuletzt editiert von
        #17

        @xenon Von /opt/iobroker/node_modules/iobroker.javascript/lib ausgehend ist /opt/test/class.js unter dem relativen Pfad ../../../../test/class.js zu finden.

        Hier als Beispiel mal mit /home/iobroker/test.js:
        11e3f836-55c6-47bb-8089-9656b5d8dd46-grafik.png

        Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

        U XenonX 2 Antworten Letzte Antwort
        1
        • AlCalzoneA AlCalzone

          @xenon Von /opt/iobroker/node_modules/iobroker.javascript/lib ausgehend ist /opt/test/class.js unter dem relativen Pfad ../../../../test/class.js zu finden.

          Hier als Beispiel mal mit /home/iobroker/test.js:
          11e3f836-55c6-47bb-8089-9656b5d8dd46-grafik.png

          U Offline
          U Offline
          uwe72
          schrieb am zuletzt editiert von uwe72
          #18

          @alcalzone said in Hilfe bei Strukturierung von Klassen in TypeScript:

          /opt/iobroker/node_modules/iobroker.javascript/lib

          Ich bin zu doof dafür :-(

          599e4971-29f5-4966-ab10-2b0772ee3c27-image.png

          Update: Habe nun das Mirror-Verzeichnis rausgenommen (weiß nicht ob es wirklich damit zusammen hängt), funktioniert nun aber:
          8d4a7a6e-935f-4f18-9d21-60c8dbfe3e8e-image.png

          F 1 Antwort Letzte Antwort
          0
          • U uwe72

            @alcalzone said in Hilfe bei Strukturierung von Klassen in TypeScript:

            /opt/iobroker/node_modules/iobroker.javascript/lib

            Ich bin zu doof dafür :-(

            599e4971-29f5-4966-ab10-2b0772ee3c27-image.png

            Update: Habe nun das Mirror-Verzeichnis rausgenommen (weiß nicht ob es wirklich damit zusammen hängt), funktioniert nun aber:
            8d4a7a6e-935f-4f18-9d21-60c8dbfe3e8e-image.png

            F Offline
            F Offline
            fastfoot
            schrieb am zuletzt editiert von
            #19

            @uwe72 sagte in Hilfe bei Strukturierung von Klassen in TypeScript:

            Update: Habe nun das Mirror-Verzeichnis rausgenommen (weiß nicht ob es wirklich damit zusammen hängt), funktioniert nun aber:

            upps, das ist mir gar nicht aufgefallen dass da ein Unterschied ist. Aber an der Fehlermeldung kannst du es auch sehen, da stehen 5 x ../, also brauchst du im require nur 1x ../ so wie ich es schon mal gepostet hatte. Mir war es aber früher mal nicht gelungen unterhalb von /opt/iobroker zu kommen, das werde ich mal noch ohne mirror probieren

            iobroker läuft unter Docker auf QNAP TS-451+
            SkriptRecovery: https://forum.iobroker.net/post/930558

            1 Antwort Letzte Antwort
            0
            • AlCalzoneA Offline
              AlCalzoneA Offline
              AlCalzone
              Developer
              schrieb am zuletzt editiert von
              #20

              Ich bin mir nicht sicher, was Mirror damit zu tun haben soll. Alle Skripte laufen in einer Sandbox, die sich in /opt/iobroker/node_modules/iobroker.javascript/lib befindet. Von dort aus werden alle requires aufgelöst.

              Aber an der Fehlermeldung kannst du es auch sehen, da stehen 5 x ../, also brauchst du im require nur 1x ../ so wie ich es schon mal gepostet hatte

              Die Fehlermeldung ist irreführend. Der JS-Adapter versucht erst den gegebenen Pfad und wenn das schief läuft hängt er vorne noch ../../ an. Das wird dann geloggt.

              @uwe72 Du scheinst Docker zu verwenden. Welchen (absoluten) Pfad hat denn dein Test-Skript innerhalb Docker?

              Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

              1 Antwort Letzte Antwort
              0
              • AlCalzoneA AlCalzone

                @xenon Von /opt/iobroker/node_modules/iobroker.javascript/lib ausgehend ist /opt/test/class.js unter dem relativen Pfad ../../../../test/class.js zu finden.

                Hier als Beispiel mal mit /home/iobroker/test.js:
                11e3f836-55c6-47bb-8089-9656b5d8dd46-grafik.png

                XenonX Offline
                XenonX Offline
                Xenon
                Forum Testing Developer
                schrieb am zuletzt editiert von Xenon
                #21

                @alcalzone sagte in Hilfe bei Strukturierung von Klassen in TypeScript:

                @xenon Von /opt/iobroker/node_modules/iobroker.javascript/lib ausgehend ist /opt/test/class.js unter dem relativen Pfad ../../../../test/class.js zu finden.

                Danke dir, funktioniert ! :)

                Ist es sinnvoll das im /opt/iobroker anzulegen? Oder kann da was durch Updates des ioBrokers kaputt gehen?

                wenn euch mein Beitrag geholfen hat, bewertet ihn bitte unten rechts :)

                F 1 Antwort Letzte Antwort
                0
                • XenonX Xenon

                  @alcalzone sagte in Hilfe bei Strukturierung von Klassen in TypeScript:

                  @xenon Von /opt/iobroker/node_modules/iobroker.javascript/lib ausgehend ist /opt/test/class.js unter dem relativen Pfad ../../../../test/class.js zu finden.

                  Danke dir, funktioniert ! :)

                  Ist es sinnvoll das im /opt/iobroker anzulegen? Oder kann da was durch Updates des ioBrokers kaputt gehen?

                  F Offline
                  F Offline
                  fastfoot
                  schrieb am zuletzt editiert von
                  #22

                  @xenon sagte in Hilfe bei Strukturierung von Klassen in TypeScript:

                  Ist es sinnvoll das im /opt/iobroker anzulegen? Oder kann da was durch Updates des ioBrokers kaputt gehen?

                  Also ich hatte meine Skripte immer in /opt/iobroker/scripts und bisher nie Probleme durch Updates etc. gehabt.

                  Allerdings bin ich jetzt endlich dem Rat von @Thomas-Braun gefolgt und und habe seit Kurzem den mirror nach /home/iobroker/scripts verlegt. Im Docker kann man das einfach nach Aussen mappen so dass ich auch weiterhin Zugriff mit VS Code habe

                  iobroker läuft unter Docker auf QNAP TS-451+
                  SkriptRecovery: https://forum.iobroker.net/post/930558

                  XenonX 1 Antwort Letzte Antwort
                  1
                  • F fastfoot

                    @xenon sagte in Hilfe bei Strukturierung von Klassen in TypeScript:

                    Ist es sinnvoll das im /opt/iobroker anzulegen? Oder kann da was durch Updates des ioBrokers kaputt gehen?

                    Also ich hatte meine Skripte immer in /opt/iobroker/scripts und bisher nie Probleme durch Updates etc. gehabt.

                    Allerdings bin ich jetzt endlich dem Rat von @Thomas-Braun gefolgt und und habe seit Kurzem den mirror nach /home/iobroker/scripts verlegt. Im Docker kann man das einfach nach Aussen mappen so dass ich auch weiterhin Zugriff mit VS Code habe

                    XenonX Offline
                    XenonX Offline
                    Xenon
                    Forum Testing Developer
                    schrieb am zuletzt editiert von Xenon
                    #23

                    @fastfoot du nutzt das vs code tool? Ich habe es versucht, bekomme es aber nicht hin. Auch wenns jetzt OT ist, aber muss ich in meinem LXC irgendwie eine Freigabe erteilen? So sieht es bei mir immer aus (bin in sowas nicht so der Profi :D )

                    2021-11-15 18_20_30-Window.png

                    wenn euch mein Beitrag geholfen hat, bewertet ihn bitte unten rechts :)

                    F T 2 Antworten Letzte Antwort
                    0
                    • XenonX Xenon

                      @fastfoot du nutzt das vs code tool? Ich habe es versucht, bekomme es aber nicht hin. Auch wenns jetzt OT ist, aber muss ich in meinem LXC irgendwie eine Freigabe erteilen? So sieht es bei mir immer aus (bin in sowas nicht so der Profi :D )

                      2021-11-15 18_20_30-Window.png

                      F Offline
                      F Offline
                      fastfoot
                      schrieb am zuletzt editiert von fastfoot
                      #24

                      @xenon sagte in Hilfe bei Strukturierung von Klassen in TypeScript:

                      @fastfoot du nutzt das vs code tool? Ich habe es versucht, bekomme es aber nicht hin. Auch wenns jetzt OT ist, aber muss ich in meinem LXC irgendwie eine Freigabe erteilen?

                      ja, den vs code Editor unter Windows. Mit LXC kenne ich mich leider null aus, beim Docker ist dieses Mapping so eine Art mount mit dem man fast beliebig Ordner ausserhalb des Containers bringt. Als Standard empfiehlt sich zB /opt/iobroker so dass bei einem Wechsel/Update des Containers die iobroker installation völlig(!) unberührt bleibt. Falls LXC bzw LXD diese Möglichkeit nicht bietet würde ich das über einen mount probieren

                      Edit: Ich greife mit vs code direkt auf ein Share zu und benutze kein Add-on

                      iobroker läuft unter Docker auf QNAP TS-451+
                      SkriptRecovery: https://forum.iobroker.net/post/930558

                      1 Antwort Letzte Antwort
                      1
                      • XenonX Offline
                        XenonX Offline
                        Xenon
                        Forum Testing Developer
                        schrieb am zuletzt editiert von
                        #25

                        @fastfoot kommando zurück....... hatte https aktiv.... jetzt gehts :)

                        wenn euch mein Beitrag geholfen hat, bewertet ihn bitte unten rechts :)

                        1 Antwort Letzte Antwort
                        0
                        • AlCalzoneA AlCalzone

                          @uwe72 sagte in Hilfe bei Strukturierung von Klassen in TypeScript:

                          Wie kann ich in einer dritten Datei die Klassen A und B einbinden? Ich weiß, dass ich A und B in global verschieben kann.

                          Geht nicht direkt im Skript-Editor wenn du global vermeiden willst. Packe alles in ein einzelnes Skript oder lagere die gemeinsamen Dinge wie die Klassen in externe Module (Dateien) aus, die du auf der Platte in einem Ordner ablegst, der für den Nutzer iobroker lesbar ist. Die kannst du dann per require("/pfad/zur/datei.js") laden.

                          ScroungerS Offline
                          ScroungerS Offline
                          Scrounger
                          Developer
                          schrieb am zuletzt editiert von
                          #26

                          @alcalzone

                          Geht das auch inzwischen mit Typescript?

                          Folgendes versuche ich gerade, Typescript liegt unter /opt/iobroker/test

                          myModule.ts:

                          export class testClass {
                              public static readonly testString = "alias.0";
                          }
                          

                          Wenn ich das aufrufen will:

                          const myModule = require('../../../test/myModule.ts');
                          console.warn(myModule.testClass.testString);
                          

                          bekomme ich folgende Fehlermeldung:

                          2023-01-24 09:04:15.881 - error: javascript.0 (2305) script.js.alias.Licht.Test: /opt/iobroker/test/myModule.ts:1
                          2023-01-24 09:04:15.881 - error: javascript.0 (2305) at wrapSafe (node:internal/modules/cjs/loader:1094:15)
                          2023-01-24 09:04:15.881 - error: javascript.0 (2305) at Module._compile (node:internal/modules/cjs/loader:1129:27)
                          2023-01-24 09:04:15.882 - error: javascript.0 (2305) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1219:10)
                          2023-01-24 09:04:15.882 - error: javascript.0 (2305) at Module.load (node:internal/modules/cjs/loader:1043:32)
                          2023-01-24 09:04:15.882 - error: javascript.0 (2305) at Function.Module._load (node:internal/modules/cjs/loader:878:12)
                          2023-01-24 09:04:15.882 - error: javascript.0 (2305) at Module.require (node:internal/modules/cjs/loader:1067:19)
                          2023-01-24 09:04:15.882 - error: javascript.0 (2305) at require (node:internal/modules/cjs/helpers:103:18)
                          2023-01-24 09:04:15.882 - error: javascript.0 (2305) at require (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:509:32)
                          2023-01-24 09:04:15.882 - error: javascript.0 (2305) at script.js.alias.Licht.Test:3:16
                          2023-01-24 09:04:15.882 - error: javascript.0 (2305) at Script.runInContext (node:vm:141:12)
                          2023-01-24 09:04:15.883 - error: javascript.0 (2305) script.js.alias.Licht.Test: script.js.alias.Licht.Test:4
                          2023-01-24 09:04:15.883 - error: javascript.0 (2305) console.warn(myModule.testClass.testString);
                          2023-01-24 09:04:15.883 - error: javascript.0 (2305) ^
                          2023-01-24 09:04:15.883 - error: javascript.0 (2305) TypeError: Cannot read properties of undefined (reading 'testClass')
                          2023-01-24 09:04:15.883 - error: javascript.0 (2305) at script.js.alias.Licht.Test:4:23
                          2023-01-24 09:04:15.883 - error: javascript.0 (2305) at Script.runInContext (node:vm:141:12)
                          
                          U 1 Antwort Letzte Antwort
                          0
                          • ScroungerS Scrounger

                            @alcalzone

                            Geht das auch inzwischen mit Typescript?

                            Folgendes versuche ich gerade, Typescript liegt unter /opt/iobroker/test

                            myModule.ts:

                            export class testClass {
                                public static readonly testString = "alias.0";
                            }
                            

                            Wenn ich das aufrufen will:

                            const myModule = require('../../../test/myModule.ts');
                            console.warn(myModule.testClass.testString);
                            

                            bekomme ich folgende Fehlermeldung:

                            2023-01-24 09:04:15.881 - error: javascript.0 (2305) script.js.alias.Licht.Test: /opt/iobroker/test/myModule.ts:1
                            2023-01-24 09:04:15.881 - error: javascript.0 (2305) at wrapSafe (node:internal/modules/cjs/loader:1094:15)
                            2023-01-24 09:04:15.881 - error: javascript.0 (2305) at Module._compile (node:internal/modules/cjs/loader:1129:27)
                            2023-01-24 09:04:15.882 - error: javascript.0 (2305) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1219:10)
                            2023-01-24 09:04:15.882 - error: javascript.0 (2305) at Module.load (node:internal/modules/cjs/loader:1043:32)
                            2023-01-24 09:04:15.882 - error: javascript.0 (2305) at Function.Module._load (node:internal/modules/cjs/loader:878:12)
                            2023-01-24 09:04:15.882 - error: javascript.0 (2305) at Module.require (node:internal/modules/cjs/loader:1067:19)
                            2023-01-24 09:04:15.882 - error: javascript.0 (2305) at require (node:internal/modules/cjs/helpers:103:18)
                            2023-01-24 09:04:15.882 - error: javascript.0 (2305) at require (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:509:32)
                            2023-01-24 09:04:15.882 - error: javascript.0 (2305) at script.js.alias.Licht.Test:3:16
                            2023-01-24 09:04:15.882 - error: javascript.0 (2305) at Script.runInContext (node:vm:141:12)
                            2023-01-24 09:04:15.883 - error: javascript.0 (2305) script.js.alias.Licht.Test: script.js.alias.Licht.Test:4
                            2023-01-24 09:04:15.883 - error: javascript.0 (2305) console.warn(myModule.testClass.testString);
                            2023-01-24 09:04:15.883 - error: javascript.0 (2305) ^
                            2023-01-24 09:04:15.883 - error: javascript.0 (2305) TypeError: Cannot read properties of undefined (reading 'testClass')
                            2023-01-24 09:04:15.883 - error: javascript.0 (2305) at script.js.alias.Licht.Test:4:23
                            2023-01-24 09:04:15.883 - error: javascript.0 (2305) at Script.runInContext (node:vm:141:12)
                            
                            U Offline
                            U Offline
                            uwe72
                            schrieb am zuletzt editiert von
                            #27

                            @scrounger Es läuft gerade ein ähnliches/gleiches Thema auf:
                            https://forum.iobroker.net/topic/70069/einfügen-von-js-klassen-aus-eigenem-npm-modul/46?_=1699738698812

                            Typescript-Klassen/Code lassen sich einbinden. Problem ist aktuell, dass wenn im externen Script was wie "sendTo()" vorkommt, dies dann in iobroker angemeckert wird, da nicht erkannt wird.

                            1 Antwort Letzte Antwort
                            1
                            • T Offline
                              T Offline
                              ticaki
                              schrieb am zuletzt editiert von ticaki
                              #28

                              3 Topics zum gleichen Thema? EDIT - oh 2 Jahre alt...

                              Lösung:
                              https://github.com/ticaki/script-library-example

                              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                              Spenden

                              1 Antwort Letzte Antwort
                              0
                              • XenonX Xenon

                                @fastfoot du nutzt das vs code tool? Ich habe es versucht, bekomme es aber nicht hin. Auch wenns jetzt OT ist, aber muss ich in meinem LXC irgendwie eine Freigabe erteilen? So sieht es bei mir immer aus (bin in sowas nicht so der Profi :D )

                                2021-11-15 18_20_30-Window.png

                                T Offline
                                T Offline
                                ticaki
                                schrieb am zuletzt editiert von ticaki
                                #29

                                ... ... ...

                                Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                Spenden

                                1 Antwort Letzte Antwort
                                0
                                Antworten
                                • In einem neuen Thema antworten
                                Anmelden zum Antworten
                                • Älteste zuerst
                                • Neuste zuerst
                                • Meiste Stimmen


                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                339

                                Online

                                32.6k

                                Benutzer

                                82.1k

                                Themen

                                1.3m

                                Beiträge
                                Community
                                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                ioBroker Community 2014-2025
                                logo
                                • Anmelden

                                • Du hast noch kein Konto? Registrieren

                                • Anmelden oder registrieren, um zu suchen
                                • Erster Beitrag
                                  Letzter Beitrag
                                0
                                • Home
                                • Aktuell
                                • Tags
                                • Ungelesen 0
                                • Kategorien
                                • Unreplied
                                • Beliebt
                                • GitHub
                                • Docu
                                • Hilfe