타입 추론
VSCode 상에서 코드를 작성했을 때 그 코드의 타입이 무엇인지 정의해나가는 방식이 타입 추론이다.
타입스크립트가 어떻게 타입을 추론하는지에 대해 알아보자.
특정 변수를 선언해서 값을 할당한다거나, 함수의 파라미터의 기본값을 지정한다거나, 함수의 반환값을 설정해줄 때 타입 추론이 기본적으로 일어난다.
var a;
입력한 var a;
에 마우스오버하면 var a: any
와 'a' 변수는 암시적으로 'any' 형식이지만, 사용량에서 더 나은 형식을 유추할 수 있습니다.ts(7043)
라는 안내를 볼 수 있다.
==> VSCode에 내장되어있는 타입스크립트의 랭귀지 서버 기능.
function getB(b = 10) {
var c = 'hi';
return b + c;
}
getB()
함수의 인자로b
를 주는데b
를 10이라고 제한했다.
따라서, getB()함수 실행 시 b의 값을 넣어주지 않으면 자동적으로 10이 인자로 들어가게 된다.getB()
함수 내에서c
를string
으로 정의 후getB()
함수에 마우스오버해 보면,getB()
함수의 인자b
의 타입은number
이고, 반환값은string
임을 알 수 있다.
인터페이스와 제네릭을 이용한 타입 추론 방식
인터페이스를 제네릭으로 정의했을 때, 제네릭의 값을 타입스크립트 내부적으로 추론해서 변수에 필요한 속성들의 타입들까지 함께 보장해준다.
interface Dropdown<T> {
value: T;
title: string;
}
var shoppingItem: Dropdown<string> = {
value: 'abc',
title: 'hello'
}
shoppingItem
의 타입을Dropdown<string>
으로 줬기 때문에Dropdown의 <T>
는string
이라고 추론된다.Dropdown
의 속성인value
까지 자동적으로string
이라고 추론된다.
복잡한 구조에서의 타입 추론 방식
interface Dropdown<T> {
value: T;
title: string;
}
interface DetailedDropdown<K> extends Dropdown<K>{
description: string;
tag: K;
}
var detailedItem: DetailedDropdown<string> = {
title: 'abc',
description: 'abc',
value: 'a',
tag: 'a'
}
DetailedDropdown
인터페이스를 통해Dropdown
인터페이스 타입까지 추론이 된다.제네릭을 사용할 때 관례적으로
<T>
라고 사용한다. 위의 코드에서는 구별을 위해<K>
를 사용한 것이다.
타입 추론을 통해 코드를 작성하고 저장할 때마다 바로바로 타입스크립트 랭귀지서버에 의해서 타입이 추론이 되고, 그 값들의 타입이 옳은지 코드상에서 나타내 준다.
Best Common Type 추론 방식
타입은 보통 몇 개의 표현식(코드)을 바탕으로 타입을 추론한다. 그리고 그 표현식을 이용해 가장 근접한 타입을 추론하게 되는데 이 가장 근접한 타입을 Best Common Type이라고 한다.
// Best Common Type
// 유니온 타입으로 타입들을 추론한다.
var arr = [1, 2, true, true, 'a'];
arr
에 마우스오버하면 var arr: (string | number | boolean)[]
으로 타입이 추론됨을 알려준다.