إصدار 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]
القضايا ذات الصلة:
نظام الاتحاد ليس شيئًا يجب أن تعتمد عليه في أي شيء. ذكرت RyanCavanaugh هذا عندما تمت مناقشة النقابات إلى المجموعات هنا :
أولاً ، نظام الاتحاد ليس شيئًا يمكننا السماح به على الإطلاق. داخليًا ، يتم تخزين النقابات كقائمة مصنفة من الأنواع (هذه هي الطريقة الفعالة الوحيدة لتحديد العلاقات بينها بسرعة) ، ومفتاح الفرز هو معرف داخلي يتم إنشاؤه بشكل متزايد. والنتيجة العملية لهذا هو أن برنامجين متشابهين للغاية يمكن أن يولدا أوامر اتحاد مختلفة إلى حد كبير ، وأن نفس الاتحاد الذي لوحظ في سياق خدمة اللغة قد يكون له ترتيب مختلف عما هو عليه عند ملاحظته في سياق سطر الأوامر ، لأن الترتيب الذي يتم به إنشاء الأنواع هو ببساطة الترتيب الذي يتم فحصهم به.
التعليق الأكثر فائدة
نظام الاتحاد ليس شيئًا يجب أن تعتمد عليه في أي شيء. ذكرت RyanCavanaugh هذا عندما تمت مناقشة النقابات إلى المجموعات هنا :