본문으로 건너뛰기

2장 타입 시스템

2.1 타입의 종류

타입: 자바스크립트에서 다루는 값의 형태에 대한 설명

형태: 값에 존재하는 속성과 메서드, 내장되어 있는 typeof 연산자가 설명하는 것

타입스크립트의 가장 기본적인 타입은 자바스크립트의 일곱 가지 원시 타입과 같다.

  • null
  • undefined
  • boolean
  • string
  • number
  • bigint
  • symbol

Boolean과 Number와 같은 객체는 각 원싯값을 감싸는 객체이다. 타입스크립트에서는 일반적으로 boolean과 number처럼 소문자로 참조하는 것이 모범 사례이다.

2.1.1 타입 시스템

타입 시스템: 프로그래밍 언어가 프로그램에서 가질 수 있는 타입을 이해하는 방법에 대한 규칙 집합

타입 시스템의 작동 방식

  1. 코드를 읽고 존재하는 모든 타입과 값을 이해한다.
  2. 각 값이 초기 선언에서 가질 수 있는 타입을 확인한다.
  3. 각 값이 추후 코드에서 어떻게 사용될 수 있는지 모든 방법을 확인한다.
  4. 값의 사용법이 타입과 일치하지 않으면 사용자에게 오류를 표시한다.

2.1.2 오류 종류

타입스크립트를 작성하는 동안 가장 자주 접하게 될 오류 두 가지는 다음과 같다.

  • 구문 오류: 타입스크립트가 자바스크립트로 변환되는 것을 차단한 경우
  • 타입 오류: 타입 검사기에 따라 일치하지 않는 것이 감지된 경우

구문 오류

  • 타입스크립트가 코드로 이해할 수 없는 잘못된 구문을 감지할 때 발생한다.
  • 타입스크립트가 타입스크립트 파일에서 자바스크립트 파일을 올바르게 생성할 수 없도록 차단한다.

타입 오류

  • 타입 오류는 타입스크립트의 타입 검사기가 프로그램의 타입에서 오류를 감지했을 때 발생한다.
  • 코드가 실행되면 무언가 충돌하거나 예기치 않게 작동할 수 있음을 나타낸다.

2.2 할당 가능성

할당 가능성: 타입스크립트에서 함수 호출이나 변수에 값을 제공할 수 있는지 여부를 확인하는 것

let lastName = 'King';
lastName = true; // ERROR

2.2.1 할당 가능성 오류 이해하기

할당 가능성 오류는 타입스크립트 코드를 작성할 때 만나게 되는 가장 일반적인 오류 중 하나이다.

2.3 타입 애너테이션

변수에 초깃값이 없으면 기본적으로 변수를 암묵적인 any 타입으로 간주한다.

진화하는 any: 초기 타입을 유추할 수 없는 변수

타입 애너테이션: 초깃값을 할당하지 않고도 변수의 타입을 선언할 수 있는 구문

변수에 타입 애너테이션으로 정의한 타입 외의 값을 할당하면 타입 오류가 발생한다.

let rocker;

rocker = 'Joan Jett';
rocker.toUpperCase(); // OK

rocker = 19.58;
rocker.toPrecision(1); // OK

rocker.toUpperCase(); // ERROR

2.3.1 불필요한 타입 애너테이션

다음 코드에서 string 타입 애너테이션은 중복이다. 타입스크립트가 이미 firstName이 string 타입임을 유추할 수 있기 때문이다.

let firstName: string = 'Tina';

2.4 타입 형태

2.4.1 모듈

타입스크립트는 최신 모듈 파일을 기존 파일과 함께 실행할 수 있다. 모듈 파일에 선언된 모든 것은 해당 파일에서 명시한 export 문에서 내보내지 않는 한 모듈 파일에서만 사용할 수 있다.

파일이 스크립트면 타입스크립트는 해당 파일을 전역 스코프로 간주하므로 모든 스크립트가 파일의 내용에 접근할 수 있다. 즉, 스크립트 파일에 선언된 변수는 다른 스크립트 파일에 선언된 변수와 동일한 이름을 가질 수 없다.

타입스크립트는 CommonJS와 같은 이전 모듈을 사용해서 작성된 타입스크립트 파일의 import, export 형태는 인식하지 못한다. 타입스크립트는 일반적으로 CommonJS 스타일의 require 함수에서 반환된 값을 any 타입으로 인식한다.

2.5 마치며

타입스크립트의 타입 시스템이 어떻게 작동하는지 살펴봤다.