كيفية إنشاء الكائنات الديناميكية في TypeScript


هل توجد أي طريقة لتعريف نوع كائن ديناميكي في TypeScript؟ في المثال التالي، أود تعريف نوع لـ "نوعي المعقد" بالقول:

الكائنات من نوع "نوعي المعقد" هي كائنات تحتوي على "أي عدد من الخصائص" ولكن يجب أن تكون قيم هذه الخصائص من نوع IValue.

// value interface
interface IValue {
    prop:string
}

// My Complex Type
myType = {
    field1:IValue
    field2:IValue
    .
    .
    .
    fieldN:IValue
}

// Using My Complex Type 

interface SomeType {
    prop:My Complex Type
}

الإجابة رقم 1

نعم، يمكن تحقيق هذا النوع من السلوك، ولكن بطريقة مختلفة قليلاً. فقط تحتاج إلى استخدام واجهة TypeScript، مثل:

interface IValue {
    prop: string
}

interface MyType {
    [name: string]: IValue;
}

الذي سيتم استخدامه كمثال مثل:

var t: MyType = {};
t['field1'] = { prop: null };
t['field2'] = new DifferentType(); // compile-time error
...
var val = t['field1'];
val.prop = 'my prop value';

لا تحتاج إلى إنشاء فئة TypeScript، كل ما تحتاجه هو كائن جافاسكريبت عادي (في هذه الحالة {}) وجعله يطبق الواجهة MyType، بحيث يتصرف مثل القاموس ويوفر لك أمان النوع في وقت الترجمة.