تايب سكريبت - تعريف حالة Pinia بناءً على واجهة دون إنشاء كل خاصية مرة أخرى يدويًا


أحاول تنفيذ إدارة الحالة (pinia) في تطبيق صفحة واحدة (SPA). نحن نستخدم TypeScript وأتساءل عما إذا كان هناك أي طريقة لتعريف حالة بناءً على واجهة بدون الحاجة إلى كتابة نوع كل خاصية في الحالة مرة أخرى. باختصار، إخبار الحالة بأنها مبنية على واجهة وأنها تبدأ بالهيكل الصحيح.

يمكنني تعريف حالة لتتبع هيكل واجهة محددة باستخدام defineStore<string, MyInterface> (وهو بالفعل إنجاز كبير) ولكنني أتساءل عما إذا كان من الممكن اتباع مفهوم معامل الانتشار لتجنب كتابة جميع خصائص الواجهة في إعلان الحالة.

مثال مفهومي

interface ICustomer {
    id: number;
    name: string;
    // up to 100 more properties and in some cases, nested objects based on other interfaces
}

export const useCustomersStore = defineStore<string, ICustomer>('customers', {
    state: () => ({
        ...ICustomer,
    }),
...

لدينا واجهات كبيرة إلى حد ما (أتحدث عن بين 50-100 خاصية في كل واحدة) وإذا كان علينا كتابة كل خاصية مرة أخرى في الحالة، قد يصبح الأمر مطولًا بعض الشيء. أظن أن المشكلة الرئيسية هي أن الحالة تحتاج إلى قيمة افتراضية لتُهيأ، ولكن إذا اضطررنا لكتابة كل الخصائص مرة أخرى، سيجعل الأمور أكثر ارتباكًا بعض الشيء. وأيضًا، هذا ليس مستقبليًا جدًا إذا كان علينا أن نتذكر تعديل خصائص الحالة عند تغيير الواجهات. دائمًا تتطابق واجهات برمجة التطبيقات لدينا بالضبط مع نفس هيكل الواجهة، لذا نحن نستخدم axios مع تحديد الواجهة في كل استدعاء أيضًا.

شكراً

الإجابة رقم 1

يمكنك فعل هذا:

interface ICustomer {
    id: number;
    name: string;
    // up to 100 more properties and in some cases, nested objects based on other interfaces
}

export const useCustomersStore = defineStore('customers', {
    state: (): ICustomer => ({

    }),
    ...