عند استخدام TypeScript ، يبدو من المستحيل استخدام مكون كنوع.
على سبيل المثال ، لا يمكن كتابة متجر يحتوي على مثيل مكون مثل:
import AnyComponent from "./AnyComponent"
const componentStore = writable<SvelteComponent>(null)
$componentStore = AnyComponent
سيعطي السطر الأخير الخطأ التالي:
اكتب 'typeof \
ربما غاب عني شيئًا ما حول كيفية كتابة المكونات ، لكني أود أن أكون قادرًا على استخدام هذا النوع من الأنماط.
إليك منشور StackOverflow الذي فتحته قبل كتابة هذه المشكلة ، حيث أوعزنيdummdidumm بفتح هذه المشكلة. آمل أن يكون هذا جيدًا.
مرحبًا بكم
شيء واحد هو أننا نفتقد بعض الخصائص / الطرق في تعريفنا الداخلي لفئة مكون Svelte. الشيء الآخر هو أن الكتابة خاطئة ، يجب أن تكون writable<typeof SvelteComponent>
، وإلا فإنك تشير إلى مثيل هذا المكون ، وليس نوع الفئة.
لقد واجهت مشكلة مماثلة.
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 ...
الإصدار 3.35.0
السؤال هو لماذا يحتوي المكون المستورد على نوع "typeof SvelteComponentDev" بدلاً من SvelteComponentDev
لأن Comp
هي الفئة وليس مثيلها.
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
آه. من المنطقي. شكرا لك.
القتال مع هذا لمدة يومين على التوالي الآن. أنا فقط لا تحصل عليه:
<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)
ما الخطأ الذي أفعله هنا؟ أريد فقط تحويل هذا المثال إلى متغير. 😭
@ Alfagun74 المشكلة التي تواجهها ليست مثل غيرها في هذا الموضوع. ما تريده هو مثيل للفئة. لذلك أنت فقط بحاجة إلى:
<script lang="ts">
import MyComponent from "./MyComponent.svelte";
let myComponent: MyComponent;
</script>
<MyComponent bind:this={myComponent}/>
يريد الآخرون عنصرًا ديناميكيًا ، لذا فهم بحاجة إلى الفصل نفسه ، وظيفة خاصة.
التعليق الأكثر فائدة
مرحبًا بكم
شيء واحد هو أننا نفتقد بعض الخصائص / الطرق في تعريفنا الداخلي لفئة مكون Svelte. الشيء الآخر هو أن الكتابة خاطئة ، يجب أن تكون
writable<typeof SvelteComponent>
، وإلا فإنك تشير إلى مثيل هذا المكون ، وليس نوع الفئة.