고급 TypeScript - 타입 추론: 컨텍스트 기반 타입
타입 추론: 컨텍스트 기반 타입
TypeScript의 강력한 기능 중 하나로, 변수에 할당된 값이나 함수의 반환값 등을 기반으로 TypeScript가 자동으로 타입을 결정하는 과정을 의미합니다. 이 과정은 코드의 가독성을 높이고, 개발자가 명시적으로 타입을 지정하지 않아도 안전하게 코드를 작성할 수 있도록 돕습니다.
컨텍스트 기반 타입
컨텍스트 기반 타입 추론은 특정 상황에서 TypeScript가 더 많은 정보를 바탕으로 변수가 어떤 타입인지 추론하는 방법입니다. 기본적으로는 변수나 매개변수의 사용 맥락(context)을 고려하여 그에 맞는 적절한 타입을 유추합니다.
예제:
-
기본적인 예
let message = "Hello, World!"; // 위와 같이 문자열이 할당되면 'message'는 string 타입으로 추론됩니다. message = 42; // 오류 발생: 'number' 형식은 'string' 형식에 할당할 수 없습니다.
-
함수 매개변수를 통한 컨텍스트
function greet(person: { name: string }) { return `Hello, ${person.name}`; } const user = { name: "Alice" }; console.log(greet(user)); // 여기서 person 매개변수는 객체 형태를 요구하며, // TypeScript는 user가 올바른 구조를 가지고 있는지 확인하고 이를 통해 type을 유추합니다. const invalidUser = { age: 30 }; console.log(greet(invalidUser)); // 오류 발생: '{ age: number; }' 형식은 '{ name: string; }' 형식에 할당할 수 없습니다.
-
배열과 메서드 사용
const numbers = [1, 2, 3]; numbers.push(4); // TypeScript는 numbers 배열이 숫자형 배열임을 인지하고, // push 메서드는 숫자만 허용하므로 다른 데이터 유형 추가 시 오류를 발생시킵니다. numbers.push("five"); // 오류 발생 : Argument of type '"five"' is not assignable to parameter of type 'number'.
-
조건부 문맥에서의 추론
function processValue(value: number | string) { if (typeof value === "string") { return value.toUpperCase(); // 여기서 value는 string으로 간주되어 toUpperCase() 메서드를 사용할 수 있습니다. } return value * 2; // 여기는 number로 간주되어 곱셈 연산이 가능합니다. } console.log(processValue("hello")); // 출력 : HELLO console.log(processValue(10)); // 출력 : 20
요약
컨텍스트 기반 타입 추론은 TypeScript가 코드 작성 시 제공하는 매우 유용한 기능입니다. 이는 개발자가 실수를 줄이고 코드 품질을 향상시키며, 유지보수를 용이하게 합니다. 이러한 특성을 이해하면 보다 효율적이고 안전한 코드를 작성할 수 있으며, 복잡한 애플리케이션에서도 일관된 방식으로 데이터를 처리할 수 있게 됩니다.