HTML&CSS&Javascript/TS

[Typescript] 타입 명시(Type Annotation) / 타입 추론(Type Inference) / 타입 표명(Type Assertion) 이란 ?

킹우현 2023. 8. 13. 02:49

타입 명시(Type Annotation)

타입 명시란 변수를 선언할 때, 변수 값의 타입을 명시함으로써 변수 값의 데이터 타입을 지정하는 것을 의미한다.

 

Annotate는 "주석을 달다" 라는 사전적인 뜻을 가지고 있다. 타입스크립트에서는 변수, 함수, 함수 반환값의 데이터 타입을 지정하기 위해 "타입 명시(Type annotation)"을 사용한다. 즉, 타입에 주석을 달아준다.


한 번 식별자를 특정 타입으로 annotated 하면 해당 타입만 사용할 수 있다. 다른 타입을 사용하게 되면 타입스크립트 컴파일러가 에러를 던진다.

 

1) 변수에 타입 지정하기

let a: number;
//a라는 변수에는 number 타입의 값만 할당 및 재할당할 수 있다.

a = "Mark"; //error
a = 23; //correct

let a = "Joah"
//a에 첫 할당으로 문자열을 할당하면 a에 재할당시 문자열만 재할당할 수 있다.

a = 23; //error
a = "good" //correct

2) 함수에 타입 지정하기

function hello(a: number):void{
  console.log(a)
}
hello(33)
//correct


function hello(a: number):void{
  console.log(a)
}
hello("Joah")
//error

 

타입 추론(Type Inference)

let x = 3; // let x: number
let y = "4"; // let y: string
let x = [0, 1, null]; // let x: (number | null)[]

타입 추론이란 TypeScript에서 명시적인 타입 표기가 없을 때 타입 정보를 제공하기 위해 사용되는 것이다.

👉🏻 즉, 자동으로 타입을 추론하여 결정해주는 것이라고 보면 된다.

 

이런 식으로 javascript처럼 사용하면 typescript는 자동적으로 타입을 추론하여 알맞은 타입을 결정한다. 그리고 여러 타입을 동시에 사용할 경우 최적 공통 타입을 알아서 계산해준다.

 

✨ 타입을 추론하지 못해서 타입 명시를 꼭 해주어야 하는 경우

- any 타입을 리턴하는 경우
- 변수 선언을 먼저하고 나중에 초기화하는 경우
- 변수에 대입될 값이 일정하지 않거나 여러 타입이 지정되어야 하는 경우

 

타입 표명(Type Assertion)

TypeScript에서는 시스템이 추론 및 분석한 타입 내용을 변경 할 수 있는데, 이를 Type assertion이라고 한다. 쉽게 말해, 프로그래머가 내가 이 자료의 타입을 잘 알고 있으니, 토 달지 말라고 선언 해주는 것이다.

 

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

 

타입스크립트에서는 시스템이 추론 및 분석한 타입을 우리가 원하는 대로 지정해줄 수 있는데, 이를 사용하면 값의 타입을 설정하고 컴파일러에게 이를 유추하지 않도록 지시할 수 있다.

(이는 개발자가 타입스크립트가 자체적으로 추론할 수 있는 것보다 변수 유형에 대해 더 잘 이해하고 있을 때 사용해야 한다.)

 

결론적으로 타입 추론이든 타입 표명이든 웬만하면 사용하지 말도록 하자 🥲