-
[TypeScript] Narrowing & Assertion 문법 정리공부/TypeScript 2024. 3. 18. 17:00
1. Type Narrowing ?
- if문 등을 사용하여 타입을 하나로 정하는(좁히는) 문법을 말한다.
- 사용하는 이유는 Union type을 사용하면 Narrowing(좁히다)문법을 사용해서 타입을 하나로 정해주거나
Assertion(선언) 문법으로 타입을 선언해주는 것이 필요하기 때문이다.
2. Narrowing 문법 예시
/* 1. type of 연산자를 사용해서 정하기 */ function NarrowingTest ( a : number | string ) { if(typeof a === 'string') { return a + '1'; } else { return 'a는 number입니다.' } /* 2 in 연산자를 사용해서 정하기 */ type Cookie = {choco : string } type Ice = {berry : string } function NarrowingTest2 ( a : Cookie | Ice ) { if( 'choco' in a) { return a + '1'; } else { return 'a는 number입니다.' } //union type이 서로 다른 속성을 가지고 있어야 in 키워드를 사용할 수 있다. /* 3. instanceof 연산자를 사용해서 정하기 */ // => object 두 개가 비슷하면 부모 class가 누군지 물어봐서 narrowing 가능 let title = document.querySelector('#title'); if (title instanceof Element){ title.innerHTML = '방가방가'; } //타입을 하나로 확정 지을 수 있는 코드라면 어떤 것도 narrowing 역할 할 수 있다.
기타 Narrowing 방법
/* 1. && 사용 : 논리연산자 여러개를 사용하면 비교할 때 자료형을 넣으면 &&사이에 처음 등장하는 falsy값을 찾아거나 그게 아니면 마지막 값을 남겨준다. (null, undefined, NaN...) */ function Check(a : string | undefined) { // && 기호 사용 undefined까지 한번에 타입 체크 if( a && typeof a === 'string') { console.log(a); } } // 추가로 if (a != null) 이렇게 조건식을 써도 null, undefined 이거 두 개를 동시에 거를 수 있다. // 2. in 연산자 사용하기 (obj가 서로 다른 속성(유니크)을 가진 것을 구분할 때 사용) type bort Type인지 확인하는 문법) = {swin : string} type airplane = {fly : string} function Check_Type (Transit : bort | airplane) { /* 이 상황에서 만약 if typeof를 쓰면 object로 인식해서 오류가 발생한다.*/ // if문을 사용해 narrowing (swin이 Transit에 들어 있는지, 있다면 bort Type인지 확인하는 문법) if('swin' in Transit) { Transit.swin; } }
3. Assertion 문법 ?
- 타입을 덮어씌우는 문법이다.
- 변수의 타입을 number로 생각해주세요 라고 하면 컴파일러가 넘어갈 수 있는 문법이다.
- 일반적으로 확실하게 정확한 값이 들어올 때 사용하며, Type 에러를 해결하는 용으로 사용한다.
4. Assertion 문법 예시
//Assertion 문법 count는 number라고 주장하기에 컴파일러는 넘어가게 된다. function AssertionTest (count : number|string) { return count as number + 1; } /* 이전에는 요런 형식으로 작성했다. let chicken :string = 'soy'; <number>chicken */
'공부 > TypeScript' 카테고리의 다른 글
[TypeScript]Literal Types, Readonly, const 정리 (0) 2024.03.19 [TypeScript] TypeAlias ? (0) 2024.03.19 [TypeScript] typeof, keyof 연산자 정리 (0) 2024.03.18 [TypeScript] 타입 지정(선언)하기 (0) 2024.03.16 [TypeScript] TypeScript란? (0) 2024.03.16