Post

타입스크립트 - 타입스크립트 - 기본

타입스크립트

자바스크립트에 타입을 부여한 언어

동적인 자바스크립트는 런타임동작에 타입 오류를 확인하지만, 정적인 타입스크립트는 컴파일(자바스크립트로 변환)단계에서 오류를 확인함

  • 자바스크립트 코드를 단순화하여 더 쉽게 읽고 디버그할 수 있도록 도와줌
  • 코드를 더 쉽게 읽고 이해할 수 있음
  • 코드 유형 검사를 통해 자바스크립트를 작성할 때 개발자가 일반적으로 겪는 버그를 피하는데 도움을 줌

타입시스템

  • 개발 환경에서 에러를 잡는 것을 도와줌
  • 타입 annotations를 사용해 코드를 분석할 수 있음
  • 오직 개발환경에서만 사용
  • 성능과는 관계가 없음

ENUM: 열거형

1
2
3
4
5
6
enum PrintMedia{
  Newspaper, // 0
  Newsletter, // 1
  Magazine, // 2
  Book // 3
}
1
2
3
4
5
6
enum PrintMedia{
  Newspaper = 1, // 1
  Newsletter = 50, // 50
  Magazine = 55, // 55
  Book // 56
}

언어 코드를 정의하는 코드를 작성할 때, 언어의 집합을 만들 때도 enum을 사용

1
2
3
4
5
6
7
8
9
export enum = LanguageCode {
  korean = 'ko',
  english = 'en',
  japanese = 'ja',
  chinese ='zh',
  spanish = 'es'
}

const code: LanguageCode = LanguageCode.english // 'en'

ENUM과 객체의 차이 ENUM | 객체

  • 선언할 때 이후에 변경할 수 없음새로운 자유롭게 추가 가능
    문자열 혹은 숫자만 허용모든 타입 허용

Never

어떤 일이 절대 일어나지 않을 것이라고 확신할 때 사용

  • 리턴 값을 절대로 내보내지 않음
  • 에러를 던지거나 무한루프에 빠질 때 사용-
1
2
3
4
5
6
7
8
function throwError(errorMsg: string): never {
  throw new Error(errorMsg);
}
function keepProcessing(): never {
  while (true) {
    console.log("무한루프");
  }
}

type annotaion

개발자가 타입을 타입스크립트에게 직접 말해주는 것 const rate :number = 5

type inference

타입스크립트가 알아서 타입을 추론하는 것 const rate = 5

타입을 추론하지 못해 type annotaion을 해줘야할 때

  1. any 타입을 리턴할 때

    1
    2
    3
    
    const json = '{"x":4,"y":7}';
    const coordinates = JSON.parse(json);
    console.log(coordinates); // coordinates: any
    
  2. 변수 선언을 먼저하고 나중에 초기화하는 경우

    변수 선언과 동시에 초기회하면 타입을 추론하지만, 선언을 하고 나중에 값을 초기화할 때는 추론하지 못한

    1
    2
    3
    4
    
    let greeting;
    greeting = "hello"; // any
    
    let greeting = "hello"; // string
    
  3. 변수에 대입될 값이 일정하지 못하는 경우

    여러 타입이 지정되어야할 때는or로 여러 타입을 애노테이션을 해줌
    1
    2
    3
    4
    5
    6
    7
    
    let num = [-7, -2, 10];
    let numAboveZero: boolean | number = false;
    for (let i = 0; i < num.length; i++) {
      if (num[i] > 0) {
        numAboveZero = num[i];
      }
    }
    
This post is licensed under CC BY 4.0 by the author.