실제로 현업에선 null
과 undefined
타입을 체크하는 경우가 많습니다.
어떤 변수나 함수파라미터에 null, undefined가 들어올 경우
어떻게 대처할지 if문으로 코드짜는 경우가 매우 많을 겁니다.
🐈 if문 조건에 &&
기호를 사용하자! 🐈
function 함수(a :string|undefined){
if(a && typeof a==='string'){
// a가 undefined면 if문 실행x
// a가 string일때 if문 실행o
}
}
in 연산자로 object 자료 narrowing
ex. 파라미터로 object가 2개 들어올 수 있다고 타입지정을 했다.
하나는 {a : 'kim}
다른 하나는 {b : 'park'}
if (이 파라미터가 a라는 속성을 안에 가지고 있냐)
이런 if문을 써도 narrowing이 가능하다.
if (키값 in object자료형)
이렇게 쓰면 됩니다.
type Fish = {swim :string}
type Bird = {fly :string}
//서로 가진 속성명이 다릅니다.
function 함수(animal :Fish | Bird){
if('swim' in animal){ <== Fish타입인지 검사하는 narrowing
return animal.swim
}
return animal.fly
}
class로부터 생산된 object라면 instanceof로 narrowing
어떤 클래스로부터 new 키워드로 생산된 object들은 instanceof
키워드를 붙여서 부모 클래스가 누군지 검사할 수 있다 ==> narrowing
리터럴 타입이 뭐더라?
=> 특정 글자나 숫자만 가질 수 있게 제한을 두는 타입 literal type
object 타입이 둘다 비슷하게 생겼을때, narrowing하는법
== literal type
고정된 값 만들어두셈.
type Car = {
wheel : '4개', //이렇게 literal type만듬.
color : string
}
type Bike = {
wheel : '2개',
color : string
}
function 함수(x : Car | Bike){
if (x.wheel === '4개'){
console.log('the car is ' + x.color)
} else {
console.log('the bike is ' + x.color)
}
}