تايبسكريبت 1.5 - واجهة تايبسكريبت تحتوي على خاصية مسماة وخصائص فهرس بأسماء عشوائية من نوع مختلف
أود إنشاء واجهة لكائن له نوع معين لخاصية معينة مسماة ونوع مختلف لجميع الخصائص الأخرى.
كيف يمكنني كتابة تعريف لـ foo أدناه؟
let foo = {
size: 3,
a: 'foo',
b: 'bar',
c: 'baz'
}
هذا سيكون نهجي الحدسي:
interface Foo {
size: number;
[name: string]: string;
}
ومع ذلك، يحاول TypeScript تطبيق التعريف العام على التعريف المحدد ويؤدي إلى ظهور الخطأ التالي:
error TS2411: Property 'size' of type 'number' is not assignable to string index type 'string'.
الإجابة رقم 1
يمكنك أن تفعل شيئًا كهذا (لا أعرف إذا كان سيعمل في TypeScript الإصدار 1.5):
interface Size {
size: number;
}
interface StringMap {
[name: string]: string;
}
type Foo = Size & StringMap;
الإجابة رقم 2
دون تعريف كل خاصية، هذا متوقع، لكن يمكنك فعل هذا:
interface Foo1 {
size: number;
[name: string]: string|number;
}
أفضل من استخدام any.
