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.
  • AlCalzoneA Offline
    AlCalzoneA Offline
    AlCalzone
    Developer
    schrieb am zuletzt editiert von
    #1

    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

    https://github.com/ioBroker/ioBroker.javascript/pull/43

    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
      #2

      Ein paar Änderungen später:
      1097_iob-ts.png

      Known bugs:

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

      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
        #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

                          437

                          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