// 간단한 null과 undefined 구분
function strOrNullOrUndefined(param: string | null | undefined) {
if (param === undefined) { // 또는 typeof param === 'undefined'
param; // undefined
} else if (param === null) {
param; // null
} else {
param; // string
}
}
타입 좁히기에 꼭 typeof 를 써야 할 필요가 없다.
타입스크립트도 자바스크립트 문법을 사용하기 때문에 활용
// Array 구분
function strOrNumArr(param: string | number[]) {
if (Array.isArray(param)) {
param; // number[]
} else {
param; // string
}
}
// instanceof 연산자 활용 (클래스, 함수)
class A {}
class B {}
function classAorB (param: A | B) {
if (param instanceof A) {
param; // A
} else {
param; // B
}
}
두 객체를 구분하는 방법
타입 좁히기는 자바스크립트 문법을 사용해서 진행해야 한다.
즉, 자바스크립트에서도 실행할 수 있는 코드여야 한다.
interface X {
width: number;
height: number
}
interface Y {
length: number;
center: number;
}
// X, Y는 타입스크립트의 인터페이스이므로 에러가 발생
function objXorY(param: X | Y) {
if (param instanceof X) {
param; // error
} else {
param;
}
}
객체의 속성으로 구분하면 될까?
in 연산자를 사용
function objXorY(param: X | Y) {
// 자바스크립트에서 유효한 방식이지만, width 속성이 Y에 존재하지 않지만 width 속성에 접근해서 에러 발생
if (param.width) { // error
param;
} else {
param;
}
}
// 👍
function objXorY(param: X | Y) {
if ('width' in param) {
param; // X
} else {
param; // Y
}
}