Typescript: لم يتم التعرف على المتغير كنوع حرفي للسلسلة عند استخدام عامل التشغيل الثلاثي

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



إصدار TypeScript: 2.0.3 / nightly (2.1.0-dev.201xxxxx)
2.0.3

رمز

function test(val: 'AAA'|'BBB'){
  //xxx
}

let a = true ? 'AAA' : 'BBB';
test(a);

سلوك متوقع:
جمعت بنجاح

السلوك الفعلي:
حصلت على خطأ:

خطأ TS2345: الوسيطة من النوع 'سلسلة' غير قابلة للتخصيص إلى معلمة من النوع '"AAA" | "BBB" ".

Question

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

لقد نوقش هذا عدة مرات.

أولاً ، أنت تقوم بالتخصيص إلى متغير let ، مما يعني أن المترجم سيفترض أنك قد ترغب في تغيير القيمة في المستقبل ، وبالتالي لا يقوم بتعيين نوع سلسلة حرفية للمتغير.

أيضًا ، في الإصدار 2.0 ، لم يكن هناك أبدًا استنتاج للحروف. سيتعين على المطور القيام بذلك صراحة. لذلك لإصلاح هذا:

function test(val: 'AAA'|'BBB'){
  //xxx
}

let a: 'AAA' | 'BBB' = true ? 'AAA' : 'BBB';
test(a);

ولكن في TypeScript 2.1 ، سوف يفسر المهام إلى const بأكثر الطرق صرامة ، لذا يمكنك القيام بذلك على النحو التالي:

function test(val: 'AAA'|'BBB'){
  //xxx
}

const a = true ? 'AAA' : 'BBB';
test(a);

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

لقد نوقش هذا عدة مرات.

أولاً ، أنت تقوم بالتخصيص إلى متغير let ، مما يعني أن المترجم سيفترض أنك قد ترغب في تغيير القيمة في المستقبل ، وبالتالي لا يقوم بتعيين نوع سلسلة حرفية للمتغير.

أيضًا ، في الإصدار 2.0 ، لم يكن هناك أبدًا استنتاج للحروف. سيتعين على المطور القيام بذلك صراحة. لذلك لإصلاح هذا:

function test(val: 'AAA'|'BBB'){
  //xxx
}

let a: 'AAA' | 'BBB' = true ? 'AAA' : 'BBB';
test(a);

ولكن في TypeScript 2.1 ، سوف يفسر المهام إلى const بأكثر الطرق صرامة ، لذا يمكنك القيام بذلك على النحو التالي:

function test(val: 'AAA'|'BBB'){
  //xxx
}

const a = true ? 'AAA' : 'BBB';
test(a);
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

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

manekinekko picture manekinekko  ·  3تعليقات

DanielRosenwasser picture DanielRosenwasser  ·  3تعليقات

dlaberge picture dlaberge  ·  3تعليقات

kyasbal-1994 picture kyasbal-1994  ·  3تعليقات

jbondc picture jbondc  ·  3تعليقات