NEWS
Skripte in Typescript
-
Hi,
ich würde gerne meine Skripte in Typescript schreiben. Das funktioniert für einzelne Skripte auch ganz gut. Wenn ich jedoch mehrere habe werden gleiche Funktionen etc angemeckert. Ich bin bei der Suche nach einer Doku für Typescript leider nicht fündig geworden. Deshalb ein paar Fragen.- Wie muss ich meine Skripte organisieren?
- Wie kann ich etwas aus anderen Skripten (global) importieren?
- Kann ich mit async/await und Promises arbeiten?
- Gibt es Beispiele?
-
@Milraun sagte in Skripte in Typescript:
Wenn ich jedoch mehrere habe werden gleiche Funktionen etc angemeckert
Beispiel?
Wie muss ich meine Skripte organisieren?
Nicht anders als JavaScript.
Wie kann ich etwas aus anderen Skripten (global) importieren?
Geht nicht. Du kannst globale Skripte im Ordner global ablegen. Diese werden aber einfach im Quelltext intern VOR die anderen Skripte gehängt, d.h. dort definierte Funktionen sind in allen anderen Skripten ebenfalls enthalten.
Kann ich mit async/await und Promises arbeiten?
Selbstverständlich. Glaube aktuell sind wir bei TypeScript 3.9, d.h. die ganzen neuen Syntax-Features sind unterstützt.
Gibt es Beispiele?
Nein, wofür brauchst du welche?
-
@AlCalzone said in Skripte in Typescript:
@Milraun sagte in Skripte in Typescript:
Wenn ich jedoch mehrere habe werden gleiche Funktionen etc angemeckert
Beispiel?
Ich habe zwei Skripte mit der Funktion init() in common. Bei einem bekomme ich:
javascript.0 (17880) script.js.common.sonosRadio: TypeScript compilation failed: function init() : void { ^ ERROR: Duplicate function implementation.
wenn ich die Funktion im zweiten Skript umbenenne kompiliert das Skript
Wie muss ich meine Skripte organisieren?
Nicht anders als JavaScript.
Wie kann ich etwas aus anderen Skripten (global) importieren?
Geht nicht. Du kannst globale Skripte im Ordner global ablegen. Diese werden aber einfach im Quelltext intern VOR die anderen Skripte gehängt, d.h. dort definierte Funktionen sind in allen anderen Skripten ebenfalls enthalten.
Gut, in der Doku stand, dass man Funktionen mit "declare" deklarieren muss was in Typescript nicht geht. Wenn ich keinen import oder so machen kann habe ich im Editor immer Fehler. Das Skript kompiliert dann trotzdem
Kann ich mit async/await und Promises arbeiten?
Selbstverständlich. Glaube aktuell sind wir bei TypeScript 3.9, d.h. die ganzen neuen Syntax-Features sind unterstützt.
Gibt es Beispiele?
Nein, wofür brauchst du welche?
Für Skripte in Typescript. Hab da bisher nicht viel gefunden.
-
@Milraun sagte in Skripte in Typescript:
Bei einem bekomme ich: Duplicate function implementation.
Interessant... Das dürfte eigentlich nur sein, wenn du in einem global Skript die gleiche Funktion hast.
Gut, in der Doku stand, dass man Funktionen mit "declare" deklarieren muss was in Typescript nicht geht.
Doch, müsste gehen. Ich glaube aber das war, bevor für Funktionen in globalen Skripten automatisch Definitionen erzeugt und anderen Skripten bereit gestellt wurde.
Für Skripte in Typescript. Hab da bisher nicht viel gefunden.
Machen nicht viele. Hier wäre eins: https://forum.iobroker.net/topic/31211/vorlage-roborock-gen1-einzelraumreinigung-mit-valetudo
-
Es ist echt schräg - scheinbar kollidieren Konstanten und Funktionsnamen zwischen verschiedene Typescript-Scripten.
Ich hab mir jetzt mit
namespace MyNamespaceName { // script code... }
geholfen.
Siehe: https://www.typescriptlang.org/docs/handbook/namespaces.html
Wobei sich schon die Frage stellt, was im Hintergrund passiert, wenn die Bezeichner von völlig unterschiedlichen Scripten kollidieren.
-
@noox sagte in Skripte in Typescript:
Bezeichner von völlig unterschiedlichen Scripten kollidieren
Du verwendest nicht zufällig globale Skripte?Edit: nein, ich kanns auch bei normalen Skripten nachvollziehen.
Habe Issue erstellt, schaue ich mir die Tage an, wenn ich dazu komme.
https://github.com/ioBroker/ioBroker.javascript/issues/627 -
@noox Lass mich raten, du verwendest in den betroffenen Skripten kein
import
?In TypeScript, just as in ECMAScript 2015, any file containing a top-level import or export is considered a module. Conversely, a file without any top-level import or export declarations is treated as a script whose contents are available in the global scope (and therefore to modules as well).
Ein Workaround wäre, in den Dateien
export {}
zu ergänzen, dann verschwindet der Fehler. In einer kommenden Version wird der Adapter das auch selbst machen. -
@AlCalzone said in Skripte in Typescript:
@noox Lass mich raten, du verwendest in den betroffenen Skripten kein
import
?Stimmt. Hab kein
import
verwendet. Mein letzte großes Angular/TypeScript-Projekt ist schon wieder 2 Jahre her und ich hab schon wieder viel zu viel vergessenWürde das heißen, dass ich mit
import
undexport
Scripts wiederverwenden könnte? Ich habe doch immer wieder Code-Teile, die ich in ein paar Scripte gerne wiederverwenden möchte, aber für global einfach zu viel sind. -
@noox sagte in Skripte in Typescript:
Würde das heißen, dass ich mit import und export Scripts wiederverwenden könnte?
Nein, du kannst nur node-Module per import einbinden. Skripte wiederverwenden (bzw. Skript-Module) erfordern ein Node.js-Feature was nur experimentell ist.
export
in Skripten ist ohne Funktion (außer TypeScript zu überreden, dem Skript sein eigenes Scope zu geben).