[TS] annotation, inference

김다빈·2023년 9월 1일

타입스크립트

목록 보기
3/13
post-thumbnail

✅ type annotation

개발자가 타입을 타입스크립트에게 직접 말해주는 것

const rate: number = 5;

✅ type inference

타입스크립트가 알아서 타입을 추론하는 것

변수 선언과 초기화를 동시에 할 경우, 초기화한 값의 타입을 보고 알아서 추론한다.

const rate = 5;

그러면 최대한 오류 발생을 막기 위해서 모든 데이터에 타입을 annotate 하는 것이 좋을까?
➡️ 모든 부분에 타입을 annotate 하는 것보단 타입스크립트가 알아서 추론할 수 있는 부분은 냅두고, 그렇게 하지 못하는 부분들만 annotate 해주는 것이 좋다.

그러면 타입스크립트가 알아서 데이터를 추론하지 못하는 경우는 어떤 경우가 있을까?

📌 type annotation을 꼭 해줘야하는 경우

✅ any 타입을 리턴하는 경우

const json = '{"x": 4, "y": 7}'
const coordinates = JSON.parse(json)
console.log(coordinates)

개발자는 json을 파싱하면 어떤 타입일지 예상할 수 있지만, 타입스크립트는 그렇지 않다. 데이터 타입이 혼재되어 있어서 any라고 추론한다. 그러므로 이런 경우에는 annotation 해줘야 한다.

✅ 변수 선언을 먼저하고 나중에 초기화하는 경우

변수 선언과 동시에 초기화하면 타입을 추론할 수 있지만, 선언과 초기화를 따로 하는 경우에는 선언할 때 타입을 annotation 해줘야 한다.

let greeting
greeting = 'hello' //let greeting: any

✅ 변수에 대입될 값이 일정치 못하는 경우 (=대입될 값의 타입이 여러 종류일 때)

let num = [-7, -2, 10]
let numAboveZero: boolean | number = false

for (let i = 0; i < num.length; i++) {
  if (num[i] > 0) {
    numAboveZero = num[i]
  }
}

처음엔 numAboveZero 에 false 값을 임의로 할당하고, 그 뒤로 for문을 돌면서 numAboveZero 의 데이터 타입이 숫자형으로 변경되므로 numAboveZero 선언 시에 데이터 타입을 boolean | number 로 지정해줘야 한다.

profile
Hello, World

0개의 댓글