νμ μ€ν¬λ¦½νΈ λ²μ : 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
κ° Digit
μ΄ μλ 10
κ°μ μ·¨ν΄μΌ νκΈ° λλ¬Έμ μ νμ±μ μ μ§νλ€κ³ λ§ν©λλ€.
κ°μ₯ μ μ©ν λκΈ
μ μ€μΌμ΄μ€κ° λμ§λ λͺ¨λ₯΄κ² μ§λ§ μνλ νμ μ μ μ§ν¨κ³Ό λμμ μ νμ±μ μ μ§νκΈ° μν΄μλ λ€μμ΄ μ μ ν κ² κ°μμ
κ·νμ μμμ 루νλ₯Ό μ’ λ£νλ €λ©΄
k
κ°Digit
μ΄ μλ10
κ°μ μ·¨ν΄μΌ νκΈ° λλ¬Έμ μ νμ±μ μ μ§νλ€κ³ λ§ν©λλ€.