Typescript : Narrowing , Assertion

tchaikovsky·2022년 3월 17일
0

typescript

목록 보기
6/8

Narrowing

Narrowing으로 판정해주는 문법들

  1. typeof

  2. property in 오브젝트 자료

  3. instanceof(object)

    현재 변수의타입이 무엇인지 특정지을 수 있다면 인정을 해준다.


 function func(x :number|string){ 
 //type이 아직 하나로 확정되지 않았을 경우 Type Narrowing을 써야 한다.
 // Narrowing은 if문을 붙여서 사용할 수 있다.
 let array:number[] = [];
 if(typeof x === 'number'){
 array[0] = x;
}else{}
 }

function func2(x :number|string){
 //type이 아직 하나로 확정되지 않았을 경우 Type Narrowing을 써야 한다.
 // Narrowing은 if문을 붙여서 사용할 수 있다.
 if(typeof x === 'string'){
   return x + 1;
 }else{
   return x + 1;
 }
}

Assertion

assertion 문법 : target as type으로 작성한다 (type overwrite)

Assertion의 용도

  1. Narrowing. Union type 같은 복잡한 타입을 하나의 타입으로 줄이는 역할.

  2. 어떤 타입이 들어오는지 100% 확신할 때 쓴다.잘 안쓰인다.(버그 추적을 못함.)

  3. 실무에서 쓰이는 주 용도 -
    1.다른사람의 코드 수정할 때
    2.왜 타입에러가 나는지 모를 때 (디버깅)

중요한 점 : asssertion은 실제로 타입을 바꿔주지는 않는다.
function func3(x: number|string){
 let array : number[] = [];
 array[0] = x as number; // 실제로 x가 number로 바뀌는 것은 아니다.
}
또한 Assertion은 타입을 강제로 부여하기 위해 사용하는데 함수에 데이터를 넣고, as 타입명을 붙여 return하는 함수를 만들어 사용
type Person ={
  name : string;
}

function convertType<T>(data: string): T{
  return JSON.parse(data) as T;
}
const jsondata = convertType<Person>('{"name":"kim"}')

convertType 함수로 자료를 입력하면 as 키워드로 타입을 하나 붙여주게 만들었다.

profile
하나의 문제 해결보다 문제가 일어나는 원인을 파악하는 개발자가 되기 위해 노력하고 있습니다.

0개의 댓글