Language-tools: [TypeScript] كتابة متغير يحمل مكونًا كقيمة

تم إنشاؤها على ٢٦ أغسطس ٢٠٢٠  ·  6تعليقات  ·  مصدر: sveltejs/language-tools

عند استخدام TypeScript ، يبدو من المستحيل استخدام مكون كنوع.
على سبيل المثال ، لا يمكن كتابة متجر يحتوي على مثيل مكون مثل:

import AnyComponent from "./AnyComponent"

const componentStore = writable<SvelteComponent>(null)

$componentStore = AnyComponent

سيعطي السطر الأخير الخطأ التالي:

اكتب 'typeof \

ربما غاب عني شيئًا ما حول كيفية كتابة المكونات ، لكني أود أن أكون قادرًا على استخدام هذا النوع من الأنماط.

إليك منشور StackOverflow الذي فتحته قبل كتابة هذه المشكلة ، حيث أوعزنيdummdidumm بفتح هذه المشكلة. آمل أن يكون هذا جيدًا.

Fixed bug

التعليق الأكثر فائدة

مرحبًا بكم
شيء واحد هو أننا نفتقد بعض الخصائص / الطرق في تعريفنا الداخلي لفئة مكون Svelte. الشيء الآخر هو أن الكتابة خاطئة ، يجب أن تكون writable<typeof SvelteComponent> ، وإلا فإنك تشير إلى مثيل هذا المكون ، وليس نوع الفئة.

ال 6 كومينتر

مرحبًا بكم
شيء واحد هو أننا نفتقد بعض الخصائص / الطرق في تعريفنا الداخلي لفئة مكون 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}/>

يريد الآخرون عنصرًا ديناميكيًا ، لذا فهم بحاجة إلى الفصل نفسه ، وظيفة خاصة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات