조건부 타입
조건부 타입 소개
조건에 따라 타입을 결정하는 문법
type A = number extends string ? string : number; // false - number - number는 string의 서브 타입이 아님
type ObjectA = {
a: number;
};
type ObjectB = {
a: number;
b: number;
};
type B = ObjectB extends ObjectA ? number : string; // true - number제네릭과 조건부 타입
조건부 타입은 제네릭과 함께 쓰면 위력이 발휘된다.
type StringnumberSwitch<T> = T extends number ? string : number;
let varA: StringNumberSwitch<number>; // true - string
let varB: StringNumberSwitch<string>; // false - number
// AS_IS
function removeSpaces(text: string | undefined | null) {
return text.replaceAll(" ", "");
}
let result = removeSpaces('hi typescript")
result.toUpperCase() // undefined 이거나 null이면 타입 오류가 발생
// 해결방안 1 - 타입 좁히기
function removeSpaces(text: string | undefined | null) {
if(typeof text !== 'string') {
return undefined
}
return text.replaceAll(" ", "");
}
// 해결방안 2 - 타입단언
let result = removeSpaces('hi typescript') as string
// 해결방안 3 - 조건부 타입 사용
function removeSpaces<T>(text: T): T extends string ? string : undefined;
function removeSpaces(text: any) {
if (typeof text === "string") {
return text.replaceAll(" ", "");
} else {
return undefined;
}
}분산적인 조건부 타입
실용적인 예제
infer(Inference - 추론) : 조건부 타입 내에서 타입 추론
infer 예제
Last updated