Typescript 문서 - 08

Typescript 문서 - 08

Type Inference

Type Interface(타입 유추)
let x = 3;
변수 x의 타입은 number라고 유추할 수 있다. 이러한 종류의 추론은 1) 변수와 멤버를 초기화하고, 2) 매개 변수 기본값을 설정하고, 3) 함수 반환 유형을 결정할 때 발생한다.
대부분의 경우 타입 유추는 간단하다.

Best common type

let x = [0, 1, null];
위의 변수 x의 타입을 유추하기 위해서는 배열의 각 요소 타입을 고려해야 한다. 여기에서 타입은 number와 null이 있다. 가장 일반적인 타입은 호환되는(공통되는) 타입을 선택하면 된다.
let zoo = [new Rhino(), new Elephant(), new Snake()];
이상적으로, zoo 변수에는 Animal()로 유추되기를 원하지만, 배열에는 Animal() 타입의 객체가 없다. 이런 문제를 해결하려면 zoo 변수에 명시적으로 타입을 적어주면 된다.
let zoo: Animal[] = [new Rhino(), new Elephant(), new Snake()];
공통되는 타입이 발견되지 않으면, 타입 유추의 결과는 {}(empty object)타입이 된다. 이 타입에는 멤버가 없기 때문에 any를 사용하면 에러가 난다.

Contextual Typing

타입 유추는 TypeScript의 다른 측면에서도 동작한다. 이것을 Contextual Typing이라고 하는데, 표현식 타입의 위치에 의해 암시될 때 발생한다.
window.onmousedown = function(mouseEvent) {
  console.log(mouseEvent.button); // Ok
  console.log(mouseEvent.kangaroo); // Error
};
window.onmousedown 함수에는 버튼 속성이 포함되어 있지만, 캥거루 속성을 포함하고 있지 않다. TypeScript는 사물의 유형을 유추할 수 있다.
명시적으로도 표현할 수 있다.
window.onscroll = function(uiEvent: any) {
  console.log(uiEvent.button); // Ok
}
Contextual Typing은 여러 곳에 사용된다. 함수 호출에 대한 인수, 변수에 대입하는 부분, 타입 어설션, 객체 빛 배영 리터럴의 멤버, return 문이 그것이다.
function createZoo(): Animal[] = {
  return [new Rhino(), new Elephant(), new Snake()];
}
여기에서는 Animal, Rhino, Elephant, Snake의 타입이 사용되었다. 여기에서 가장 Common한 타입은 Animal로 공통 타입의 알고리즘으로 선택할 수 있다.

댓글

가장 많이 본 글