Typescript: لا يؤدي إرسال المصفوفة إلى أنواع المصفوفات المعينة union + إلى الاحتفاظ بترتيب النوع

تم إنشاؤها على ٧ مايو ٢٠١٩  ·  1تعليق  ·  مصدر: microsoft/TypeScript


إصدار TypeScript: 3.4.0-dev.201xxxxx


مصطلحات البحث:

فقد أمر مفتاح الأنواع المعينة

رمز

type Initial = [1, 2, 3, 4]

type FindReplace<T extends any[], Find, Replace> = {
  [K in keyof T]: T[K] extends Find ? Replace : T[K]
}

// Map over array and replace '2'
type ResultArray = FindReplace<Initial, 2, 'was 2'>
// => [1, "was 2", 3, 4]

// Now accessing the array values using [number], the type
// order is lost. This matters because now when the union is later
// cast as a intersection, the types are in the wrong order
type Result = ResultArray[number]
// => 1 | 3 | 4 | "was 2

سلوك متوقع:

يجب أن يحافظ التعيين فوق الأنواع على ترتيب المفاتيح

السلوك الفعلي:

التعيين فوق الأنواع يحافظ على "النوع" ، ولكن يتم فقد ترتيب المفتاح عند تنفيذ عامل تشغيل T[keyof T]

القضايا ذات الصلة:

Question

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

نظام الاتحاد ليس شيئًا يجب أن تعتمد عليه في أي شيء. ذكرت RyanCavanaugh هذا عندما تمت مناقشة النقابات إلى المجموعات هنا :

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

>كل التعليقات

نظام الاتحاد ليس شيئًا يجب أن تعتمد عليه في أي شيء. ذكرت RyanCavanaugh هذا عندما تمت مناقشة النقابات إلى المجموعات هنا :

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

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