Typescript: Вопрос / ИдСя: итСрация ΠΏΠΎ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΌ значСниям настраиваСмого Ρ‚ΠΈΠΏΠ°

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 11 Π΄Π΅ΠΊ. 2016  Β·  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
}

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠ΅Π½Π΅Π΅ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ чистый.

Вопрос
Π•ΡΡ‚ΡŒ Π»ΠΈ Π»ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ настраиваСмого Ρ‚ΠΈΠΏΠ°?

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π― Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ это Π·Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования, Π½ΠΎ для ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ сохранСния ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ, я Π΄ΡƒΠΌΠ°ΡŽ, Π±Ρ‹Π»ΠΎ Π±Ρ‹ умСстно ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅

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 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ