[하루 30분 러닝 타입스크립트] 타입 시스템

✨ 타입의 종류

  1. 타입이란 typeof 연산자가 설명하는 형태를 다루는 값

타입 시스템

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

오류 종류

  1. 구문 오류 : TS → JS 로 컴파일 되는 것을 차단
  2. 타입 오류 : 타입 검사기에서 일치하지 않는 타입 확인
  3. 타입 오류는 JS로 변환되는 것을 막지 않는다.

✨ 할당 가능성

함수 호출이나 변수에 값을 제공할 수 있는지 여부를 확인하는 것을 할당 가능성이라 한다.

✨ 타입 애너테이션

때로 변수에 초기값이 없는 경우, 나중 타입을 파악하려고 하지 않는다. 암묵적인 any 타입으로 간주한다. 이 때의 any를 진화하는 any 라고 부른다.

let rocker // type : any (진화하는 any)

rocker = "Joan Jett" // type : string
rocker.toUpperCase() // OK

rocker = 19.52 // type : number
rocker.toPrecision(1) // OK

rocker.toUpperCase() // ERROR

rocker의 타입이 두 번 변경되었다. 이는 의도하였는지에 대한 여부를 알 수 없기 때문에 문제라고 할 수 있다.

이를 위해 변수의 타입을 초깃값 없이 선언할 수 있는 구문 타입 애너테이션 을 제공한다.

let rocker : string;

불필요한 타입 애너테이션

let firstName: string = "Tina"; // string 애너테이션은 중복이다.

✨ 타입 형태

모듈

모듈 : export 또는 import가 있는 파일

스크립트 : 모듈이 아닌 모든 파일

  • 한 모듈에서 다른 파일에 선언된 변수와 동일한 이름으로 선언된 변수는 다른 파일의 변수를 가져오지 않는 한 이름 충돌로 간주하지 않는다.
// a.ts
export const shared = "char";

 

// b.ts
export const shared = "char"; 
// a파일에서 shared가 선언되었지만 오류가 나지 않는다.
import { shared } from "./a";

export const shared = "Cher"; 
// ERROR : 병합된 선언 'shared'의 개별 선언은 모두 내보내 졌거나 모두 로컬이어야 합니다.

 

  • 모듈 스타일(export, import가 포함된)이 아닌 일반 스크립트인 경우 이름 충돌 에러로 간주한다.
// a.ts
const shared = "char"; // 블록 범위 변수 'shared'을(를) 다시 선언할 수 없습니다.
// b.ts
const shared = "char"; // 블록 범위 변수 'shared'을(를) 다시 선언할 수 없습니다.

해당 파일을 전역 스코프로 간주하기 때문

  • CommonJS 형식의 require 함수에서 반환된 값은 any 타입으로 인지한다.