(TS) Type Inference, Assertion

Mirrer·2022년 12월 27일
0

TypeScript

목록 보기
10/14
post-thumbnail

Type Inference

명시적인 타입 표기가 없을 때 타입 정보를 제공하기 위해 사용

타입 추론(Type Inference)이란 Typescript코드를 해석해가는 동작을 의미한다.

Typescript는 다음과 같이 타입 추론 과정을 수행한다.


let x = 3;

위 코드 x 변수는 별도의 타입을 지정하지 않아도 다음과 같이 number 타입으로 간주된다.

이렇게 변수의 선언 및 초기화시 타입이 추론되며, 이외에 변수, 속성, 인자의 기본 값, 함수의 반환 값...등을 설정할 때 타입 추론이 발생한다.


Best Common Type

Typescript는 보통 여러 표현식(코드)을 바탕으로 타입을 추론한다.

그리고 표현식을 이용하여 가장 근접한 타입을 추론하게 되는데 이 때 가장 근접한 타입을 Best Common Type이라고 한다.

let arr = [0, 1, null];

위 코드의 변수 arr 의 타입을 추론하기 위해서는 배열의 각 아이템을 점검해야 한다.

각 아이템의 타입은 크게 numbernull로 구분되며, 이 때 Best Common Type 알고리즘은 다른 타입들과 가장 잘 호환되는 타입을 내부적으로 선정한다.


Contextual Typing

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

Type Checking에 있어서 Typescript의 지향점은 타입 체크는 값의 형태에 기반하여 실행되어야 하는데 이를 Duck Typing 또는 Structural Subtyping 이라고 한다.

  • Duck Typing : 객체의 변수 및 메서드의 집합이 객체의 타입을 결정하는 것을 의미. 동적 타이핑의 한 종류
  • Structural Subtyping : 객체의 실제 구조나 정의에 따라 타입을 결정하는 것을 의미

Type Assertion

타입을 강제적으로 지정

타입 단언(Type Assertion)은 개발자가 해당 타입에 대해 확신이 있을 때 사용하는 타입 지정 방식이다.

타 언어의 타입 캐스팅과 비슷한 개념이며 Typescript에서 특별히 타입을 체크하지 않고, 데이터의 구조도 신경쓰지 않는다.

let a;
a = 20;
a = 'a';

위 코드의 변수 anumber, 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
타입스크립트 입문 - 기초부터 실전까지 - 장기효

profile
memories Of A front-end web developer

0개의 댓글