타입 어노테이션과 타입 추론
1) 타입 어노테이션
사용하려는 변수, 함수 등 옆에 : 기호와 함께 우리가 배운 선언 가능한 타입을 넣어주는 것
어떤 값이 어떤 타입을 참조하고있는지 개발자가 ts에게 알려주는 행동
2) 타입 추론
ts는 코드에서 타입을 명시하지 않아도, 컴파일러가 코드의 문맥을 통해 타입을 자동으로 추론한다.
타입 어노테이션의 필요성
우리가 명시하지 않아도 ts는 타입을 추론할 수 있는데 왜 타입 어노테이션을 해야 할까?
const subtract = (a: number, b: number) => {
a - b;
};
위 함수는 아무것도 반환하지 않고, ts도 타입 추론을 통해 반환값이 void라는 것을 추론할 수 있다.
하지만 아마도! 원하는 동작이 아닐 것이다. 우리는 a - b가 반환되길 바라는데, 실수로 return 을 빼먹는 경우가 종종 있다.
이런 실수를 방지하기 위해 타입 어노테이션을 활용하는 것이 필요하다.
함수가 any 타입을 리턴하고 이 값을 명확하게 해야할 때
const json = '{"a": 1, "b": 2}';
const object = JSON.parse(json); // any 타입으로 인식 -> 어노테이션 피룡
object.aselfkje; // 에러나지 않음
// 이렇게했을 때는 object에 존재하지 않는 키값으로 접근하는 경우 찾을 수 없다는 에러 발생
const object: { a: number, b: number } = JSON.parse(json);
어떤 변수를 선언한 이후에 다른 라인에서 초기화를 할 때
const colors = ['red', 'blue', 'green'];
let foundColor; // 암묵적으로 any 타입을 가짐 -> 얘를 타입 어노테이션하자
for(let i = 0; i < colors.length; i++) {
if(colors[i] === 'blue') foundColor = true;
}
추론할 수 없는 타입을 변수가 가지게 하려 할 때
let numbers = [-10, -5, 10];
let numberAboveZero = false; // boolean 타입으로 추론됨
for(let i = 0; i < colors.length; i++) {
if(numbers[i] > 0 numberAboveZero = numbers[i]; // ts가 추론한 boolean이 아니므로 에러 발생
}
// 이렇게 해주면 위와같은 경우를 의도에 맞게 사용할 수 있음
let numberAboveZero: boolean | number = false;
'TypeScript' 카테고리의 다른 글
[TypeScript] 제네릭과 유틸리티 타입 (0) | 2024.09.24 |
---|---|
[Typescript] 타입스크립트의 타입 선언 (1) | 2024.09.24 |