Bei Verwendung von TypeScript scheint es unmöglich zu sein, eine Komponente als Typ zu verwenden.
Beispielsweise ist es nicht möglich, einen Speicher für eine Komponenteninstanz wie folgt einzugeben:
import AnyComponent from "./AnyComponent"
const componentStore = writable<SvelteComponent>(null)
$componentStore = AnyComponent
Die letzte Zeile gibt den folgenden Fehler aus:
Geben Sie 'typeof \ ein
Vielleicht habe ich etwas an der Schreibweise von Komponenten übersehen, aber ich würde gerne in der Lage sein, diese Art von Muster zu verwenden.
Hier ist ein StackOverflow-Beitrag, den ich vor dem Schreiben dieser Ausgabe geöffnet habe, wobei @dummdidumm mich angewiesen hat, diese Ausgabe zu öffnen. Ich hoffe das ist ok
Hallo 😄
Eine Sache ist, dass uns einige Eigenschaften / Methoden in unserer internen Definition unserer Svelte-Komponentenklasse fehlen. Die andere Sache ist, dass die Eingabe falsch ist, es sollte writable<typeof SvelteComponent>
, sonst beziehen Sie sich auf die Instanz dieser Komponente, nicht auf den Klassentyp.
Ich bin auf ein ähnliches Problem gestoßen.
import type { SvelteComponent } from 'svelte';
import Comp from './Comp.svelte';
const comp: SvelteComponent = Comp; // Type 'typeof SvelteComponentDev' is missing the following properties from type SvelteComponentDev: $set, $on, $destroy ...
v 3.35.0
Die Frage ist, warum eine importierte Komponente den Typ "typeof SvelteComponentDev" anstelle von SvelteComponentDev hat
Weil Comp
die Klasse ist, nicht die Instanz dieser Klasse.
class Foo {
bar: string;
}
class Comp extends Foo {}
const comp: Foo = new Comp(); // OK
const compClass1: Foo = Comp; // WRONG
const compClass2: typeof Foo = Comp; // OK
Ahh. Macht Sinn. Vielen Dank.
Ich kämpfe jetzt seit 2 Tagen damit. Ich verstehe es einfach nicht:
<script lang="ts">
import MyComponent from "./MyComponent.svelte";
let myComponent: typeof MyComponent;
</script>
<MyComponent bind:this={myComponent}/> //Error here
Argument of type 'typeof MyComponent__SvelteComponent_' is not assignable to parameter of type 'MyComponent__SvelteComponent_'.
Type 'typeof MyComponent__SvelteComponent_' is missing the following properties from type 'MyComponent__SvelteComponent_': $$prop_def, $$events_def, $$slot_def, $on, and 5 more.ts(2345)
Was mache ich hier falsch? Ich möchte diese Instanz nur in eine Variable umwandeln. 😭
@ Alfagun74 Das Problem, mit dem Sie konfrontiert sind, ist nicht dasselbe wie andere in diesem Thread. Was Sie wollen, ist eine Instanz der Klasse. Sie brauchen also nur:
<script lang="ts">
import MyComponent from "./MyComponent.svelte";
let myComponent: MyComponent;
</script>
<MyComponent bind:this={myComponent}/>
Andere Leute wollen eine dynamische Komponente, also brauchen sie die Klasse selbst, eine spezielle Funktion.
Hilfreichster Kommentar
Hallo 😄
Eine Sache ist, dass uns einige Eigenschaften / Methoden in unserer internen Definition unserer Svelte-Komponentenklasse fehlen. Die andere Sache ist, dass die Eingabe falsch ist, es sollte
writable<typeof SvelteComponent>
, sonst beziehen Sie sich auf die Instanz dieser Komponente, nicht auf den Klassentyp.