- 값의 타입을 조금씩 구체적으로 좁혀서 사용하는 것.
- 예를 들면, string | number 가 있는데
- string 과 number 에 따라 기능 별도로 구현하는것
- 조건문과 타입 체크를 사용해서 좁혀나감
- if 조건문을 이용해서 타입 좁히는 과정을 흔히
타입 가드
라고 한다.
1. typeof
로 타입 좁히기
function func(value: string | number | Date) {
if (typeof value === "string") {
value.toUpperCase();
} else if (typeof value === "number") {
value.toFixed(2);
} else if (typeof value === "object") {
// 이건 좀 위험해 보임
// Date 라는 것을 보장받지 못함.
value.getTime();
}
}
const obj = [1, 2, 3];
func(obj);
2. instanceof
로 타입 좁히기
function func(value: string | number | Date) {
if (typeof value === "string") {
value.toUpperCase();
} else if (typeof value === "number") {
value.toFixed(2);
} else if (value instanceof Date) {
// Date 라는 것을 보장받음
value.getTime();
}
}
const obj = [1, 2, 3];
func(obj);
3. in
으로 타입 좁히기
type Person = {
name: string;
age: number;
};
function func(value: string | number | Date | null | Person) {
if (typeof value === "string") {
value.toUpperCase();
} else if (typeof value === "number") {
value.toFixed(2);
} else if (value instanceof Date) {
// Date 라는 것을 보장받음
value.getTime();
// } else if (value instanceof Person) { // 오류
// } else if ("age" in value) { // 오류
// } else if (value && "age" in value) { // 성공
} else if (value as Person) {
// 성공
// 오류
console.log((value as Person).age);
}
}