Typescript: السؤال / الفكرة: كرر القيم الأولية لنوع مخصص

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

إصدار TypeScript: 2.1.4

رمز
تم استخدام الكود التالي للعمل في TS 2.0

type Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;

function iExpectDigit(d:Digit)
{ }

for (let k: Digit = 1; k < 10; k++) {
  iExpectDigit(k); //Error, because K is number
}

أعتقد أن السلوك الجديد صحيح.
نظرًا لأن k++ عملية بين رقم ورقم ، فمن المنطقي أن يصبح k رقمًا.

العمل الوحيد الذي أتيت به هو

for (let k: Digit = 1; k < 10; k = <Digit>(k + 1)) {
    // k is digit
}

أو

// in some module
export let digits: Digit[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

for (let k of digits)
{
    // k is digit
}

الطريقة الثانية أقل تعبيرا لكنها أنظف.

سؤال
هل هناك طريقة أفضل للتكرار على القيم الأولية لنوع مخصص؟

Question

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

لست متأكدًا من حالة الاستخدام ، ولكن للاحتفاظ في نفس الوقت بالنوع المطلوب والحفاظ على الصحة ، أعتقد أن ما يلي سيكون مناسبًا

type Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;

function iExpectDigit(d: Digit) { }

function isDigit(n: number): n is Digit {
    return n > -1 && n < 10 && n === Math.trunc(n);
}

for (let k = 0; isDigit(k); k++) {
    iExpectDigit(k);
}

أقول حافظ على الصواب لأنه من أجل الخروج من الحلقة في مثالك ، يجب أن يأخذ k القيمة 10 وهي ليست Digit .

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

لست متأكدًا من حالة الاستخدام ، ولكن للاحتفاظ في نفس الوقت بالنوع المطلوب والحفاظ على الصحة ، أعتقد أن ما يلي سيكون مناسبًا

type Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;

function iExpectDigit(d: Digit) { }

function isDigit(n: number): n is Digit {
    return n > -1 && n < 10 && n === Math.trunc(n);
}

for (let k = 0; isDigit(k); k++) {
    iExpectDigit(k);
}

أقول حافظ على الصواب لأنه من أجل الخروج من الحلقة في مثالك ، يجب أن يأخذ k القيمة 10 وهي ليست Digit .

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

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

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

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

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

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

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