Wie kann ich das in Javascript machen?
In TypeScript, wie kann ich dem Typsystem sagen "Ich weiß, dass dieser Wert theoretisch mehrere Typen haben kann, aber in der Praxis weiß ich, dass er nur diesen einen haben wird" TypeScript ermöglicht es Ihnen, Union-Typen basierend auf mehreren vorhandenen Typen (sogenannten Member-Typen) zu verwenden. Zum Beispiel könnte eine Funktion, die mit Zeichenketten oder Zahlen arbeitet, wie folgt definiert werden: ```function printId(id: number | string)```.

Ein Wert passt zu einem Union-Typ, wenn er zu einem der Member-Typen des Union-Typs passt. In dem gegebenen Beispiel kann der erste Parameter von `printId` (also `id`) entweder `number` oder `string` sein.

TypeScript erlaubt nur Operationen auf einem Wert eines Union-Typs unter zwei Bedingungen.
(1) Wenn es für jedes Mitglied der Union gültig ist, ODER
(2) Wenn Sie Code schreiben, der TypeScript ermöglicht, den spezifischen Typ zu erschließen. Zum Beispiel kann Code in einer Bedingung wie ```if (typeof id === "string") {}``` jede Operation ausführen, die für Zeichenketten gültig ist. Auf diese Weise können Sie Code verwenden, um TypeScript mitzuteilen, dass bestimmter Code nur gilt, wenn der Wert einen bestimmten Typ hat. Dies wird als "Einschränkung" bezeichnet. Sie müssen nichts Besonderes definieren, um dies zu tun.

Wenn Sie möchten, dass TypeScript zur Compile-Zeit überprüft, dass ein bestimmter Wert einen bestimmten Typ hat, können Sie immer Typzuweisungen verwenden. Zum Beispiel stellt ```const myCanvas = document.getElementById("main_canvas") as HTMLCanvasElement;``` eine Zuweisung dar, dass das Ergebnis des Aufrufs von `getElementById` immer vom Typ `HTMLCanvasElement` erwartet wird. Diese Typzuweisungen werden zur Compile-Zeit entfernt, aber sie können hilfreich sein, wenn die Einschränkung nicht ausreicht.
In JavaScript können Sie den Typ einer Variablen nicht direkt auf die gleiche Weise angeben wie in TypeScript. Sie können jedoch einen ähnlichen Effekt erzielen, indem Sie Typüberprüfungs- und Typkonvertierungstechniken verwenden.

Um anzugeben, dass ein Wert mehrere Typen haben kann, Sie aber wissen, dass er in der Praxis nur einen hat, können Sie Typüberprüfungs- und Typkonvertierungstechniken verwenden, um den erwarteten Typ zur Laufzeit durchzusetzen. Hier ist ein Beispiel:

        let value = "hello";
        if (typeof value === "string") {
          let length = value.length;
          console.log(length); // Ausgabe: 5
        } else {
          console.log("Ein Zeichenkettenwert wurde erwartet.");
        }

In diesem Beispiel wird der Variable value ein Zeichenkettenwert zugewiesen. Wir können den Typ von value mithilfe des typeof-Operators überprüfen und dann bedingt auf die length-Eigenschaft zugreifen, nur wenn value eine Zeichenkette ist. Wenn value etwas anderes wäre, wie eine Zahl oder ein Objekt, würde der Code den if-Block überspringen und stattdessen eine Fehlermeldung protokollieren.

Diese Technik ist nicht so leistungsfähig oder ausdrucksstark wie das Typsystem von TypeScript, kann aber dennoch dazu beitragen, bestimmte Arten von Fehlern zu erkennen und Ihren Code zuverlässiger zu machen. Wenn Sie fortgeschrittenere Typüberprüfungs- oder Typkonvertierungsfunktionen benötigen, können Sie in Betracht ziehen, eine Bibliothek oder ein Framework zu verwenden, das diese bereitstellt, wie zum Beispiel lodash oder ramda.