أحاول تكرار قيم الخصائص باستخدام {#each ...} ، ولدي نوعان من الكتابة (هذا مشروع TypeScript) في مكون Svelte الخاص بي.
<script lang="ts">
import Transition from './Transition/Transition.svelte';
type Options = { text: string, value?: string }[];
type OptionsGroup = Options[];
export let options: Options | OptionsGroup = [];
</script>
{#each options as option}
<div>example</div>
{/each}
أتوقع أن يكون نوع الخيار في كل عبارة Options | OptionsGroup
لكن VS Code يعطيني خطأ يقول:
وسيطة من النوع 'خيارات | OptionsGroup 'غير قابل للتخصيص إلى معلمة من النوع' ArrayLike <{text: string؛ القيمة ؟: سلسلة. }> '.
لست متأكدًا مما يحدث بالضبط لأن مهام الإنشاء والتطوير تعمل بشكل جيد مع عدم وجود أخطاء على الإطلاق ، ويبدو أنها مشكلة في VS Code فقط.
نظام:
لقد وجدت أيضًا خطأً غريبًا في {#each}
.
أصغر repro ممكن:
<script lang="ts">
let data: { name: string } | null = null,
someArr = [1, 2, 3];
</script>
{#if data}
<!-- Works fine -->
{data.name}
{#each someArr as _}
<!-- Highlights an error! -->
{data.name}
{/each}
{/if}
Mac ، VS Code ، يشغل أحدث مكون إضافي. لدي شعور داخلي بأنها مرتبطة إلى حد ما بهذه القضية.
dkzlv هذا هو # 619
أخشى أن هذا ليس من الممكن إصلاحه من جانبنا ، يبدو أنها مشكلة TypeScript. ستحصل على نفس الخطأ عندما تفعل هذا:
function each<T>(
array: ArrayLike<T>, // or T[], doesnt matter for the error
callbackfn: (value: T, index: number) => any
): any{ /* doesnt matter */ };
each(options, a => a); // The same TS error
هذه الوظيفة each
هي أساسًا ما يتم استخدامه للتحقق من كتلة each
-block. لم أجد طريقة لإسكات الخطأ دون فقدان نوع الأمان.
يمكنك القيام بذلك بدلا من ذلك. أعتقد أن لدي هذا الخطأ المطبوع على الحروف من قبل وحصلت عليه من خلال تجربة مجموعة عشوائية لول
<script lang="ts">
type Option = { text: string, value?: string };
type OptionsGroup = Option[];
export let options: Array<Option | OptionsGroup> = [];
</script>
{#each options as option}
<div>example</div>
{/each}
يحرر:
لاحظ أن هذين النوعين ليسا متماثلين ، لكن ربما لا تهتم بالفرق في معظم الأوقات. إذا كنت تهتم ، فربما تحتاج إلى كتابة نوع حارس مخصص لإلقاؤه.
شكرًا لك على التوضيح ، لقد قمت بتعديل كتاباتي على النحو الموصى به وقد أدى ذلك إلى حلها إلى حد كبير.