
νμ μ’νκΈ°(Type Narrowing) λ
μ¬λ¬ νμ μ΄ μμ¬ μλ κ°(μ λμ¨ νμ )μ
π 쑰건문μ ν΅ν΄ λ ꡬ체μ μΈ νμ μΌλ‘ μ€μ΄λ κ²
let value: string | number;
μ΄ μνμμλ μ΄λ€ νμ
μΈμ§ λͺ¨λ₯΄κΈ° λλ¬Έμ
π λ°λ‘ λ©μλ μ¬μ© λΆκ°λ₯
value.toUpperCase(); β (stringμΈμ§ νμ λͺ»ν¨)
κ·Έλμ 쑰건문μΌλ‘ νμ μ βμ’νμΌβ νλ€.
νμ μ€ν¬λ¦½νΈλ μμ νκ² μ½λ μ€νμ λμμ€λ€.
π νμ€νμ§ μμ νμ
μ μ¬μ© λͺ»νκ² λ§λλ€
π κ·Έλμ μ°λ¦¬κ° μ§μ νμ
μ νμΈν΄μ€μΌ νλ€
type Person = {
name: string;
age: number;
};
function func(value: number | string | Date | null | Person) {
if (typeof value === 'number') {
console.log(value.toFixed());
} else if (typeof value === 'string') {
console.log(value.toUpperCase());
} else if (value instanceof Date) {
console.log(value.getTime());
} else if (value && 'age' in value) {
console.log(`${value.name}μ ${value.age}μ΄ μ
λλ€`);
}
}
typeof value === 'number'
typeof value === 'string'
π μ¬μ© κ°λ₯ νμ
π νΉμ§
κ°μ₯ κΈ°λ³Έμ μΈ λ°©λ²
value instanceof Date
π μλ―Έ
π "valueκ° Dateλ‘ λ§λ κ°μ²΄λ?"
β true β Date νμ
νμ
β false β μλ
π μ¬μ© μ
'age' in value
π μλ―Έ
π "value μμ ageλΌλ μμ±μ΄ μλ?"
β μμΌλ©΄ β Person νμ μΌλ‘ μΆλ‘
value && 'age' in value
π μ value && λΆμΌκΉ?
π μ΄μ :
valueκ° nullμ΄λ©΄ μλ¬ λ°μνκΈ° λλ¬Έ
null.age β μλ¬
κ·Έλμ λ°λμ λ¨Όμ 체ν¬
if (value !== null)
λλ
if (value)
π null / undefined λ°©μ§μ©
π 쑰건문μ ν΅ν΄ νΉμ νμ λ§ ν΅κ³Όμν€λ κ²
if (typeof value === 'number') {
// μ¬κΈ° μμμλ 무쑰건 number
}
π μ¦
π "μ΄ νμ
λ§ λ€μ΄μ€κ² λ§λ νν°"
β μ€μ 1
typeof value === 'object'
π λ¬Έμ μ
π nullλ objectλ‘ νλ¨λ¨
typeof null === 'object' // true π±
π ν΄κ²°
value && typeof value === 'object'
β μ€μ 2
value instanceof Person β
π μ΄μ
Personμ "νμ
"μ΄μ§ "κ°"μ΄ μλ
π ν΄κ²°
'age' in value
β μ€μ 3
value.toUpperCase();
π μ λμ¨ μνμμ λ°λ‘ μ¬μ© β
π λ°λμ νμ
μ’νκΈ° νμ
π νμ μ’νκΈ° = 쑰건문μΌλ‘ νμ νμ νκΈ°
function print(value: string | number) {
if (typeof value === 'string') {
console.log(value.toUpperCase());
} else {
console.log(value.toFixed(2));
}
}
typeof value === 'string'
value instanceof Date
value && 'key' in value
π μ΄ 3κ°λ§ κΈ°μ΅νλ©΄ 80% ν΄κ²° κ°λ₯
νμ
μ’νκΈ°λ
π νμ
μ€ν¬λ¦½νΈμμ μμ νκ² μ½λ μ§λ ν΅μ¬ κΈ°μ