명시적인 타입 표기가 없을 때 타입 정보를 제공하기 위해 사용
타입 추론(Type Inference)
이란 Typescript
가 코드를 해석해가는 동작을 의미한다.
Typescript
는 다음과 같이 타입 추론 과정을 수행한다.
let x = 3;
위 코드 x
변수는 별도의 타입을 지정하지 않아도 다음과 같이 number
타입으로 간주된다.
이렇게 변수의 선언 및 초기화시 타입이 추론되며, 이외에 변수, 속성, 인자의 기본 값, 함수의 반환 값
...등을 설정할 때 타입 추론이 발생한다.
Typescript
는 보통 여러 표현식(코드)을 바탕으로 타입을 추론한다.
그리고 표현식을 이용하여 가장 근접한 타입을 추론하게 되는데 이 때 가장 근접한 타입을 Best Common Type
이라고 한다.
let arr = [0, 1, null];
위 코드의 변수 arr
의 타입을 추론하기 위해서는 배열의 각 아이템을 점검해야 한다.
각 아이템의 타입은 크게 number
와null
로 구분되며, 이 때 Best Common Type
알고리즘은 다른 타입들과 가장 잘 호환되는 타입을 내부적으로 선정한다.
Typescript
에서 타입을 추론하는 또 하나의 방식은 바로 문맥상의 타입을 결정하는 것이다.
위 방법은 코드의 위치(문맥)를 기준으로 일어난다.
window.onmousedown = function(mouseEvent) {
console.log(mouseEvent.button); //<- OK
console.log(mouseEvent.mirrer); //<- Error!
};
위 코드를 Typescript
검사기 관점에서 보면 window.onmousedown
에 할당되는 함수의 타입을 추론하기 위해 window.onmousedown
타입을 검사한다.
타입 검사가 끝나면 함수의 타입이 마우스 이벤트와 연관이 있다고 추론하기 때문에 mouseEvent
인자에 button
속성은 있지만 mirrer
속성은 존재하지 않다고 결론을 내린다.
Type Checking
에 있어서 Typescript
의 지향점은 타입 체크는 값의 형태에 기반하여 실행되어야 하는데 이를 Duck Typing
또는 Structural Subtyping
이라고 한다.
Duck Typing
: 객체의 변수 및 메서드의 집합이 객체의 타입을 결정하는 것을 의미. 동적 타이핑의 한 종류Structural Subtyping
: 객체의 실제 구조나 정의에 따라 타입을 결정하는 것을 의미
타입을 강제적으로 지정
타입 단언(Type Assertion)
은 개발자가 해당 타입에 대해 확신이 있을 때 사용하는 타입 지정 방식이다.
타 언어의 타입 캐스팅과 비슷한 개념이며 Typescript
에서 특별히 타입을 체크하지 않고, 데이터의 구조도 신경쓰지 않는다.
let a;
a = 20;
a = 'a';
위 코드의 변수 a
는 number
, string
타입 데이터를 순차적으로 할당받아 최종적으로 변수 a
의 타입은 string
이다.
하지만 a
를 할당받은 새로운 변수 b
를 확인해보면 다음과 같이 any
타입으로 출력되고 있다.
이렇게 타입 추론이 잘못된 상태를 개발자는 as
키워드를 사용하여 타입에 대한 확신을 지정할 수 있다.
let a;
a = 20;
a = 'a';
let b = a as string;
TypeScript: JavaScript With Syntax For Types.
React TypeScript Tutorial for Beginners - Codevolution
타입스크립트 입문 - 기초부터 실전까지 - 장기효