본문 바로가기
강의 실습/한 입 크기로 잘라먹는 타입스크립트(TypeScript)

타입 추론

by Jint 2024. 8. 12.

한 입 크기로 잘라먹는 타입스크립트 - 타입 추론

1. 타입 추론
타입스크립트 - 점진적 타입 시스템 채택.
변수 선언시, 타입을 명시하지 않아도 자동으로 타입을 추론해준다.

1) 일반적인 변수 선언
타입 추론 기준은 변수의 초기값.

- src/chapter5.ts

// 타입 추론
// 모든 상황에 타입을 잘 추론해주진 않는다.
/*
function func(param) {} // 함수의 매개변수
*/

// 일반적인 변수 선언하고 초기화
let a = 10; // number
let b = 'hello'; // string
let c = {
    id: 1
  , name: '송진성'
  , profile: {
        nickname: 'Jint'
    }
  , urls: ['https://stbhg5.tistory.com/']
}; // 객체
let { id, name, profile } = c; // 객체 구조 분해 할당도 가능
let [one, two, three] = [1, 'hello', true]; // 배열 구조 분해 할당도 가능

// 함수의 반환값 타입 - return 다음에 오는 반환값 타입 기준
function func() {
    return 'hello';
}

// 기본값이 설정된 매개변수의 타입 - 기본값 타입 기준
function func2(message = 'hello') {
    return 'hello';
}


즉, 변수의 타입을 추론할 정보가 있으면 추론이 되고, 추론할 정보가 없으면 추론이 안 된다고 보면 된다.

2) 초기값 없는 경우 : any 타입의 진화
변수를 초기화 없이 선언하면 암묵적으로 any 타입으로 추론한다. 변수에 값을 초기화하면 초기화한 값의 타입으로 진화한다.
명시적 any 타입과 다르게 계속 타입이 진화한다.
하지만, 암묵적 any 로 변수 타입을 추론하게 두는 것을 추천하진 않는다.

- src/chapter5.ts

...
// 초기값 없는 경우 : any 타입의 진화
let d; // 암묵적인 any 타입으로 추론
// let d: any; // 명시적인 any 타입과는 다름
d = 10; // number
d.toFixed(); // number
// d.toUpperCase(); // 불가능
d = 'hello'; // string
d.toUpperCase(); // string
// d.toFixed(); // 불가능


3) 상수로 선언할 경우
초기값을 기준으로 리터럴 타입으로 추론된다.

- src/chapter5.ts

...
// 상수로 선언할 경우 
const num = 10; // number literal type
const str = 'hello'; // string literal type


4) 초기값을 다양한 타입으로 값을 담을 수 있는 경우
타입이 추론될 때, 타입스크립트가 모든 요소들의 타입을 비교해서 최적의 공통 타입으로 추론한다.

- src/chapter5.ts

...
// 초기값을 다양한 타입으로 값을 담을 수 있는 경우
let arr = [1, 'string']; // 배열


타입스크립트는 const 로 선언하지 않는 이상 '타입 넓히기'를 통해 범용적으로 변수 사용하도록 타입을 추론해준다.


참고링크 : https://www.inflearn.com/course/%ED%95%9C%EC%9E%85-%ED%81%AC%EA%B8%B0-%ED%83%80%EC%9E%85%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8#

 

한 입 크기로 잘라먹는 타입스크립트(TypeScript) 강의 | 이정환 Winterlood - 인프런

이정환 Winterlood | 문법을 넘어 동작 원리와 개념 이해까지 배워도 배워도 헷갈리는 타입스크립트 이제 제대로 배워보세요! 여러분을 타입스크립트 마법사🧙🏻‍♀️로 만들어드립니다., 프론

www.inflearn.com

댓글