Typescript: توريث الصفيف في ملف إقرار ES6 (lib.es6.d.ts)

تم إنشاؤها على ١٣ سبتمبر ٢٠١٦  ·  3تعليقات  ·  مصدر: microsoft/TypeScript

يدعم ES6 توريث الصفيف ، لكن هذا لا ينعكس في ملف تعريف TypeScript (lib.es6.d.ts).

تقوم دوال المصفوفة مثل "filter" و "slice" بإرجاع مصفوفة من الفئة الفرعية ، لذلك يجب ترجمة ما يلي في TypeScript:

class MyArray extends Array {
    get size() { return this.length; }
}

var x = new MyArray(10).slice();
x.size;

يجب أن تعود الدالات "reverse" و "concat" و "slice" و "splice" و "filter" بالنوع "this".
تقوم وظيفة "الخريطة" بإرجاع مثيل من النوع الفرعي أيضًا ، لكنني لا أعرف كيف يمكن تمثيل ذلك في TypeScript ، لأنها تتطلب معلمة عامة في نوع الإرجاع ، شيء مثل:
map<U>(callback: (value: T, index: number, array: this) => U): this<U>

هناك مشكلة أخرى وهي المنشئات الثابتة لفئة Array ، يجب أن يتم تجميع هذا أيضًا:

var x = MyArray.of(1,2,3);
var y = MyArray.from([1,2,3]);
x.size;
y.size;

هناك أيضًا بعض التعقيدات الإضافية المضافة بواسطة species Symbol ، والتي يمكن استخدامها لتغيير توقيع النوع

class MyArray2 extends Array {
    static get [Symbol.species]() { return Array; }
}

يقوم كل من Chrome و Node.js بالفعل بتنفيذ ميزات وراثة الصفيف الموضحة هنا.

lib.d.ts Suggestion help wanted

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

يمكن حل الدوال الثابتة بجعل Array فئة. المشكلة هي أننا بحاجة إلى طريقة لوصف المُنشئ القابل للاستدعاء (https://github.com/Microsoft/TypeScript/issues/183) ، حيث يمكن أيضًا استدعاء Array كدالة. للأسف ، توقف هذا الاقتراح في TC39 ، ولكن يمكننا عمل نسخة منه للإعلانات المحيطة. أعتقد أنه يجب تتبع هذا بشكل منفصل.

بالنسبة للباقي ، يمكن إضافة this بدلاً من T[] . أعتقد أن sort يقوم بهذا بالفعل.

ال 3 كومينتر

سيكون هذا أمرًا صعبًا ، لأن TypeScript لا يسمح حاليًا بإعادة تحديد فترات زمنية للأدوية على متعدد الأشكال this . انظر # 6223 (والتي يمكن اعتبارها خدعة).

تصبح المشكلة إذا قمت بإدخال فتحة عامة مختلفة في فئة فرعية ، فكيف يعمل متعدد الأشكال this ؟ على سبيل المثال ، تقوم بإنشاء فئة فرعية تتعامل فقط مع مصفوفات من المصفوفات ، حيث تم استخدام T بهذه الطريقة T[][] . لكن الخانة العامة في Array 's this ستكون T[] ، كيف يمكنك التعبير عن ذلك بطريقة تعمل دائمًا؟

هناك المزيد من الأمثلة في المشكلة المذكورة أعلاه بالإضافة إلى الأماكن التي ينهار فيها هذا متعدد الأشكال عند دمجه مع الأدوية الجنيسة.

مشكلة "الخريطة" هي في الواقع نفس المشكلة التي تمت مناقشتها في "متعدد الأشكال" هذا "و" Generics "، ولكن يمكن أن تعمل جميع طرق Array الأخرى بشكل صحيح بمجرد إرجاع" this ".

وتنتج الطريقتان Array.from و Array.of مشكلة منفصلة ، من المستحيل أيضًا تمثيلها باستخدام بناء جملة TypeScript الحالي بقدر ما أعرف ، لأن واجهة ArrayConstructor يجب أن تكون قادرة على الإشارة إلى "هذا" من Array واجهه المستخدم.

يمكن حل الدوال الثابتة بجعل Array فئة. المشكلة هي أننا بحاجة إلى طريقة لوصف المُنشئ القابل للاستدعاء (https://github.com/Microsoft/TypeScript/issues/183) ، حيث يمكن أيضًا استدعاء Array كدالة. للأسف ، توقف هذا الاقتراح في TC39 ، ولكن يمكننا عمل نسخة منه للإعلانات المحيطة. أعتقد أنه يجب تتبع هذا بشكل منفصل.

بالنسبة للباقي ، يمكن إضافة this بدلاً من T[] . أعتقد أن sort يقوم بهذا بالفعل.

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