Language-tools: [TypeScript] Eingabe einer Variablen, die eine Komponente als Wert enthält

Erstellt am 26. Aug. 2020  ·  6Kommentare  ·  Quelle: sveltejs/language-tools

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

Fixed bug

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.

Alle 6 Kommentare

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.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen