고급 TypeScript - 타입 추론: 컨텍스트 기반 타입

타입 추론: 컨텍스트 기반 타입

TypeScript의 강력한 기능 중 하나로, 변수에 할당된 값이나 함수의 반환값 등을 기반으로 TypeScript가 자동으로 타입을 결정하는 과정을 의미합니다. 이 과정은 코드의 가독성을 높이고, 개발자가 명시적으로 타입을 지정하지 않아도 안전하게 코드를 작성할 수 있도록 돕습니다.

컨텍스트 기반 타입

컨텍스트 기반 타입 추론은 특정 상황에서 TypeScript가 더 많은 정보를 바탕으로 변수가 어떤 타입인지 추론하는 방법입니다. 기본적으로는 변수나 매개변수의 사용 맥락(context)을 고려하여 그에 맞는 적절한 타입을 유추합니다.

예제:

  1. 기본적인 예

    let message = "Hello, World!";
    // 위와 같이 문자열이 할당되면 'message'는 string 타입으로 추론됩니다.
    
    message = 42; // 오류 발생: 'number' 형식은 'string' 형식에 할당할 수 없습니다.
    
  2. 함수 매개변수를 통한 컨텍스트

    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; }' 형식에 할당할 수 없습니다.
    
  3. 배열과 메서드 사용

    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'.
    
  4. 조건부 문맥에서의 추론

    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가 코드 작성 시 제공하는 매우 유용한 기능입니다. 이는 개발자가 실수를 줄이고 코드 품질을 향상시키며, 유지보수를 용이하게 합니다. 이러한 특성을 이해하면 보다 효율적이고 안전한 코드를 작성할 수 있으며, 복잡한 애플리케이션에서도 일관된 방식으로 데이터를 처리할 수 있게 됩니다.

Subscribe to shimdh.log

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe