Typescript: توقف تأكيد النوع للقيم الحرفية للسلسلة عن العمل

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

إصدار TypeScript: 2.1.0-dev.20160912

الشفرة

// A *self-contained* demonstration of the problem follows...
const types = {
    test: <'test'>'test',
    test2: 'test2' as 'test2'
} // type: {test: string, test2:string}

let a = <'test'>'test'  // type string

ربما تتعلق بـ: https://github.com/Microsoft/TypeScript/pull/10676

Bug Fixed

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

wallverb متفق عليه ، سيكون من الجيد أن يكون لديك _some_ شكل من بناء الجملة للإشارة إلى أنك لا تريد التوسيع دون الحاجة إلى تحديد النوع صراحةً. ولكن بغض النظر ، لأسباب التوافق العكسي ، يجب أن نسمح لتأكيدات النوع بأن يكون لها هذا المعنى.

ال 3 كومينتر

نعم ، هذا متعلق بـ # 10676. في السابق ، كان للسلسلة الحرفية نوع حرفي فقط في "سياقات حرفية" معينة (مثل ما بعد تأكيد النوع) وكنا نستخدم النوع الدقيق للتعبير كنوع مستنتج من الخاصية الحرفية للكائن. الآن ، دائمًا ما تحتوي القيم الحرفية للسلسلة على أنواع حرفية وبدلاً من ذلك نقوم _widen_ بالنوع عندما يتم استنتاجها للمواقع القابلة للتغيير (مثل الخصائص الحرفية للكائن). لذلك ، في المثال الخاص بك ، تأكيدات النوع ليس لها أي تأثير (أ) لأن الجمل الحرفية هي بالفعل من أنواع حرفية و (ب) لأننا نوسع نتيجة التعبير بالكامل بعد تأكيد النوع.

من أجل توافق أفضل مع الإصدارات السابقة ، يمكننا التفكير في _not_ توسيع نوع مستنتج عندما يكون تعبير المُهيئ تأكيدًا على النوع. بعد كل شيء ، ما هو الهدف من نوع التأكيد خلاف ذلك؟

ahejlsberg شكرا لك على الرد.

سيكون من الرائع أن تفكر في _not_ توسيع نوع مستنتج عندما يكون تعبير التهيئة عبارة عن تأكيد نوع - وتوافق - هذا نوع من نقطة تأكيد النوع :)

حالة شائعة أخرى ستتوقف عن العمل بدونها هي:

function test(style: { align: 'left' | 'right', size: number }) {
}

const style = {
    align: 'left' as 'left',
    size: 5
}

test(style)

بناء الجملة للأنواع الحرفية https://github.com/Microsoft/TypeScript/issues/10195 سيساعد - لكنني لست متأكدًا مما إذا كان سيصبح حقيقة.

شكرا جزيلا على كل شيء

wallverb متفق عليه ، سيكون من الجيد أن يكون لديك _some_ شكل من بناء الجملة للإشارة إلى أنك لا تريد التوسيع دون الحاجة إلى تحديد النوع صراحةً. ولكن بغض النظر ، لأسباب التوافق العكسي ، يجب أن نسمح لتأكيدات النوع بأن يكون لها هذا المعنى.

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