재밌고 어려운 IT를 이해해보자~!

타입추론(Type Inference), 타입표명(Type Assertion) 본문

TypeScirpt

타입추론(Type Inference), 타입표명(Type Assertion)

언제나즐거운IT 2024. 10. 7. 23:35

Type Inference


타입 추론이란 TypeScript에서 명시적인 타입 표기가 없을 때 타입 정보를 제공하기 위해 사용되는 것이다.
그냥 쉽게 말하면 자동으로 타입을 결정해주는 것이라고 보면 된다.

let x = 3; // let x: number
let y = "4"; // let y: string

javascript처럼 사용하면 typescript는 자동적으로 타입을 추론하여 알맞은 타입을 결정한다.

여러 타입을 동시에 사용할 경우 최적 공통 타입을 알아서 계산

let x = [0, 1, null]; // let x: (number | null)[]

이런 식으로 타입 스크립트는 자동으로 타입을 결정지어 주지만 아무래도 타입 스크립트를 선택해서 사용하는 입장에서는 제대로 명시해서 사용해 주는 게 좋다.

Type Assertion


타입 표명 또는 타입 단언이라 불리는 Type Assertion은 타입을 강제적으로 지정해 주는 것을 말한다.
여기서 타입 캐스팅과 다르다는 점을 인식하고 있어야 한다.

function getData(): any {
  return "3";
}

const result = getData();
(result as string).length;

any라는 타입을 string 타입으로 변환해 사용하는 것

let x = "1";

// error: 'string' 형식을 'number' 형식으로 변환한 작업은 실수일 수 있습니다. 
// 두 형식이 서로 충분히 겹치지 않기 때문입니다. 
// 의도적으로 변환한 경우에는 먼저 'unknown'으로 식을 변환합니다.
let y: number = x as number;

let z: number = (<any>x) as number;

위 예제를 보면 y 변수에서 에러가 발생했는데,
이 Type Assertion를 사용하는 규칙은 "보다 구체적인 또는 덜 구체적인" 버전의 타입으로 변환하는 행위만 허용된다.
 
쉽게 말하자면 결국 저런 식의 y변수를 해결하려면 any 나 unknown으로 먼저 변환한 다음에 다시 한번 변환을 시켜줘야 한다는 의미이다. 마치 z 변수처럼!
 
결론은 그냥 타입 추론이든 타입 표명이든 웬만하면 사용하지 않는게 좋다.

'TypeScirpt' 카테고리의 다른 글

Type VS Interface  (0) 2024.10.10
클래스(Class)  (0) 2024.10.08
열거형(Enums)  (0) 2024.10.07
타입 별칭과 문자열 리터럴 (Type Alias, String Literal)  (0) 2024.10.06
객체타입 - object, array, tupple  (0) 2024.10.06
Comments