Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. ioBroker Allgemein
  4. [Work in Progress] TypeScript-Support für JS-Adapter

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    6
    1
    254

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    9
    1
    245

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    901

[Work in Progress] TypeScript-Support für JS-Adapter

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
12 Beiträge 3 Kommentatoren 2.1k Aufrufe
  • Ä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.
  • R Offline
    R Offline
    robsdobs
    schrieb am zuletzt editiert von
    #3

    Hallo,

    darüber bin ich auch gerade gestolpert:

    @AlCalzone:

    Known bugs:

    • Compiler beschwert sich über nicht definierte ioBroker-Funktionen. Ich arbeite an der Definition. `

    Gibt es hier einen Workaround?

    Ich würde gerne auf TypeScript umsteigen. Mit ist Javascript wegen der fehlenden Typisierung ein graus :)

    Danke & Gruß

    Scripte: http://forum.iobroker.net/viewtopic.php?f=23&t=2799&p=119565#p119565,

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

      @robsdobs:

      Gibt es hier einen Workaround? `
      Sollte inzwischen funktionieren:
      1097_typescript.png
      Ist dein JS-Adapter aktuell? Wenn ja, probier mal die Version von Github. => Adapterliste => Github-Symbol => Aus Dropdown "javascript" auswählen.

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

      1 Antwort Letzte Antwort
      0
      • R Offline
        R Offline
        robsdobs
        schrieb am zuletzt editiert von
        #5

        Hab ich gemacht, trotzdem noch das Problem.

        Version des adapters ist: 3.6.0
        1367_adapter.png

        Vielleicht mache ich auch was Grundsätzliches Falsch.

        Also ich habe unter global ein Script, welches die Funktion logDebug definiert:

        `function isPrimitive(obj) {
            return (obj !== Object(obj));
        }
        
        function logDebug() {
        	if (arguments.length > 0) {
        		var text = [];
        		for (var i = 0; i < arguments.length; i++) {
                    if (typeof arguments[i] === 'string' || arguments[i] instanceof String) {
                        text.push(arguments[i]);
        		    } else if(arguments[i] === null) {
                        text.push('null');
        		    } else if(arguments[i] === undefined) {
                        text.push('undefined');
                    } else if (isPrimitive(arguments[i])) {
                        text.push(arguments[i]);
                    } else {
                        text.push(JSON.stringify(arguments[i]));
                    }
        		}
        		log(text.join(' '), 'debug');
        	}
        }`
        
        Will ich diese Funktion under common nutzen, geht es bei Javascript:
         ![1367_javascript.png](/assets/uploads/files/1367_javascript.png) 
        
        Bei Typescript geht es nicht:
         ![1367_typescript.png](/assets/uploads/files/1367_typescript.png) 
        
        Die Datei unter global ist eine javascript datei.
        
        Ich habe auch versucht die Datei unter global als typescript:
        `~~[code]~~function isPrimitive(obj:any):boolean {
            return (obj !== Object(obj));
        }
        
        function logDebug(...param: any[]):void {
        	if (arguments.length > 0) {
        		var text:string[] = [];
        		for (var i = 0; i < arguments.length; i++) {
                    if (typeof arguments[i] === 'string' || arguments[i] instanceof String) {
                        text.push(arguments[i]);
        		    } else if(arguments[i] === null) {
                        text.push('null');
        		    } else if(arguments[i] === undefined) {
                        text.push('undefined');
                    } else if (isPrimitive(arguments[i])) {
                        text.push(arguments[i]);
                    } else {
                        text.push(JSON.stringify(arguments[i]));
                    }
        		}
        		log(text.join(' '), 'debug');
        	}
        }` 
        Dann wird die Funktion aber auch unter javascript nicht gefunden.[/i][/i][/i][/i][/i][/i][/i][/i][/code][/i][/i][/i][/i][/i][/i][/i][/i]
        

        Scripte: http://forum.iobroker.net/viewtopic.php?f=23&amp;t=2799&amp;p=119565#p119565,

        1 Antwort Letzte Antwort
        0
        • R Offline
          R Offline
          robsdobs
          schrieb am zuletzt editiert von
          #6

          Ich habe einen Workaround gefunden.

          Wenn ich meine globalen Scripte auf Javascript lasse und im lokalen ("common") Typescript die globalen Funktionen am Anfang "definiere", funktioniert es.

          Beispiel für die Lokale TypeScript Datei:

          declare function logDebug(...param: any[]):void;
          
          logDebug('Test');
          
          

          Das hilft mir erst mal, das ich meine lokalen Scripte umstellen kann.

          Eine Möglichkeit auch die globalen scripte als TypeScript zu haben und die Funktionen dann lokal (common) zu nutzen habe ich leider nicht gefunden.

          Wenn ich in einer globalen TypeScript eine Funktion habe und auch diese lokal vorher deklariere, dann funktioniert zwar das compilieren:

          22:11:32.679 [info] javascript.0 script.js.common.xTextDebug-ts: TypeScript compilation successful

          Bei der Ausführung findet er dann die globale Funktion nicht

          22:11:32.679 [error] javascript.0 script.js.common.xTextDebug-ts: ReferenceError: logTSTestA is not defined

          Scripte: http://forum.iobroker.net/viewtopic.php?f=23&amp;t=2799&amp;p=119565#p119565,

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

            Mit globalen Skripten hab ich bisher nicht gearbeitet und getestet, das kann etwas buggy sein. Danke für den Hinweis, muss ich mir mal im Detail anschauen.

            @robsdobs:

            Wenn ich in einer globalen TypeScript eine Funktion habe und auch diese lokal vorher deklariere, dann funktioniert zwar das compilieren:

            22:11:32.679 [info] javascript.0 script.js.common.xTextDebug-ts: TypeScript compilation successful

            Bei der Ausführung findet er dann die globale Funktion nicht

            22:11:32.679 [error] javascript.0 script.js.common.xTextDebug-ts: ReferenceError: logTSTestA is not defined `
            Kannst du den Code bitte mal posten, dann kann ich sichergehen, dass ich die gleiche Ausgangssituation beim Testen habe.

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

            1 Antwort Letzte Antwort
            0
            • R Offline
              R Offline
              robsdobs
              schrieb am zuletzt editiert von
              #8

              Also, ich bin kein programmierer und habe nur rumprobiert. Vielleicht ist das was ich hier mache auch totaler Blödsinn :lol:

              mein globales Typescript file (ts-global-test) mit den verschiedenen Varianten, die ich getestet habe:

              //ganz einfach ohne Typescript
              function logTSTestA(p) {
                  log('TypeScript global "logTSTestA "' + p + '"');
              }
              
              //einfache Typescript Funktion
              function logTSTestB(p: string):void {
                  log('TypeScript global "logTSTestB "' + p + '"');
              }
              
              //irgendwie mit export
              export function logTSTestC(p: string):void {
                  log('TypeScript global "logTSTestC "' + p + '"');
              }
              
              //andere variante mit export
              export var logTSTestD = function (p: string):void {
                  log('TypeScript global "logTSTestD "' + p + '"');
              }
              
              //mit einer modul deklaration
              //https://basarat.gitbooks.io/typescript/content/docs/project/external-modules.html
              declare module "logTest" {
              
                  export function logTSTestE(p: string):void {
                      log('TypeScript global "logTSTestE "' + p + '"');
                  }
              
              }
              
              //was ganz wildes
              //Quelle https://stackoverflow.com/questions/47736473/how-to-define-global-function-in-typescript
              function _logTSTestF(p: string):void {
                  log('TypeScript global "logTSTestF_ "' + p + '"');
              }
              
              // Global declaration
              declare var logTSTestF: typeof _logTSTestF;
              
              // Global scope augmentation
              var window = window || null;
              const _global = (window || global) as any;
              _global.logTSTestF = _logTSTestF;
              
              

              Im lokales typescript file hab ich die einzelnen varianten logTSTestA bis logTSTestD durchprobiert und das auch noch in verschiedener Weise:

              logTSTestA('ausruf test 1');
              //logTSTestB('ausruf test 2');
              //logTSTestC('ausruf test 3');
              //logTSTestD('ausruf test 4');
              
              

              Auch mal mit declare, weil ich dazu was gelesen hatte:

              declare function logTSTestA(p: string) : void;
              declare function logTSTestB(p: string) : void;
              declare function logTSTestC(p: string) : void;
              declare function logTSTestD(p: string) : void;
              
              logTSTestA('ausruf test 1');
              //logTSTestB('ausruf test 2');
              //logTSTestC('ausruf test 3');
              //logTSTestD('ausruf test 4');
              
              

              Dann noch mal mit import – hier hab ich aber keinen blassen Schimmer was ich mache:

              declare function logTSTestE(p: string) : void;
              import logTest = require('logTest');
              
              logTSTestE('ausruf test 6');
              
              declare function logTSTestF(p: string) : void;
              import logTest = require('global_ts-global-test');
              
              logTSTestF('ausruf test 6');
              

              Wie gesagt hab ich keine Ahnung. Vielleicht gibt es jetzt schon eine Möglichkeit.

              Scripte: http://forum.iobroker.net/viewtopic.php?f=23&amp;t=2799&amp;p=119565#p119565,

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

                import/export macht hier keinen Sinn, weil globale Skripte einfach im Quelltext vor die nicht-globalen Skripte gehängt werden. Ein Modulsystem gibt es nicht.

                Ich habe wahrscheinlich vergessen, die unkompilierten globalen TypeScripts vor die lokalen Skripte zu hängen, bevor sie kompiliert werden.

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

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

                  @robsdobs:

                  Vielleicht gibt es jetzt schon eine Möglichkeit. `
                  Fixes sind in https://github.com/ioBroker/ioBroker.javascript/pull/62 enthalten, der sollte demnächst gemerged sein. Da ich nicht 2x die globalen TypeScripts kompilieren will, wird es nötig sein in die lokalen Skripten die globalen Funktionen zu deklarieren, etwa so:

                  globales Skript:

                  function tsGlobal() {
                      log("global function called!");
                  }
                  

                  lokales Skript:

                  declare function tsGlobal();
                  tsGlobal();
                  

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

                  1 Antwort Letzte Antwort
                  0
                  • R Offline
                    R Offline
                    robsdobs
                    schrieb am zuletzt editiert von
                    #11

                    Super, Danke !

                    Das mit dem deklarieren ist kein Problem. Sollte mit in die Doku.

                    Scripte: http://forum.iobroker.net/viewtopic.php?f=23&amp;t=2799&amp;p=119565#p119565,

                    1 Antwort Letzte Antwort
                    0
                    • ThisoftT Offline
                      ThisoftT Offline
                      Thisoft
                      schrieb am zuletzt editiert von
                      #12

                      @AlCalzone:

                      Ich bin dabei, dem JS-Adapter TypeScript beizubringen. Ist noch Work-in-Progress und ungetestet, aber wer will kann sich gerne schon mal vergnügen `

                      Ein ganz großes Dankeschön dafür an dich!!!

                      Ich werde mich dann mal damit beschäftigen wenn ich mal wieder ein Scriptchen zu schreiben/ändern habe.

                      Ich habe die fehlende Typisierung doch schon hin und wieder verflucht wenn man strenge Typisierung von .NET & Co. gewohnt ist und sich dann JS in meinen Scripten eine fehlerhafte Zuordnung "ausgedacht" hat ;)

                      22 HM-Geräte; PivCCU2 auf RasPi

                      ioBroker-Multihost; Ubuntu-Master auf Intel-Atom und 3 RasPi-Clients

                      1 Antwort Letzte Antwort
                      0

                      Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                      Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                      Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                      Registrieren Anmelden
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate
                      FAQ Cloud / IOT
                      HowTo: Node.js-Update
                      HowTo: Backup/Restore
                      Downloads
                      BLOG

                      412

                      Online

                      32.8k

                      Benutzer

                      82.8k

                      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