TypeScript: Basic Types Ep.2 (Primitive Type, Boolean, Number)

TypeScript Types vs JavaScript Types


  • JavaScript

    자바스크립트는 Dynamic Types
    dynamic type은 개발할 때는 타입을 알 수가 없고 실제 런타임을 해야만 잘못된 것인지 알 수 있다.

  • TypeScript

    타입스크립트는 Static Types
    static type은 개발하는 중간에 타입을 체크한다.

    • 타입스크립트는 자바스크립트의 기본 자료형을 포함하여 데이터 타입이 있다.
      JavaScript 기본 자료형: boolean, number, string, null, undefined, symbol, array(object형)
    • 추가로 프로그래밍을 도울 타입이 더 제공된다.
      해당 타입들은 타입 스크립트에서 꼭 필요한 타입이며 안정성을 도와주는 역할을 한다.
      any, void, never, unknown, enum, tuple(object 형)

Primitive Types


타입스크립트의 기본 타입중에서 자바스크립트에서 온 타입이다.

  • 해당 타입은 object와 reference 형태가 아닌 실제 값을 저장하는 자료형이다.
    (즉, object와 reference는 실제 값을 저장하지 않는 것을 의미한다.)

  • primitive 형의 내장 함수를 사용 가능한 것은 자바스크립트 처리 방식 덕분이다.
    let name = 'mark';
    name.toString();
    
  • ES2015기준 primitive type 6개는 boolean, number, string, symbol, null, undefined이다.

  • primitive type은 literal 값으로 Primitive 타입의 서브 타입을 나타낼 수 있다.
    true;
    'hello';
    3.14;
    null;
    undefined;
    
  • 래퍼 객체로 만들 수 있다.

    boolean을 대문자로 시작하는 Boolean으로 new를 통해 새로 생성해서 object를 만들 수 있다.
    따라서, 이것들은 primitive type이 아닌 object이다. 해당 방법으로의 사용은 절대 권장하지 않는다! 타입으로는 사용 X

    new Boolean(false);
    // typeof new Boolean(false) : 'object'
      
    new String('word');
    // typeof new String('word') : 'object'
      
    new Nember(42);
    // typeof new Number(42) : 'object'
    

Boolean


  • boolean값
    let isDone: boolean  = false;
      
    isDone = true;
      
    console.log(typeof isDone);  //'boolean'
    
  • primitive과 wrapper object의 충돌
    let isOk: Boolean = true; // Boolean은 primitive type
      
    let isNotOk: boolean = new Boolean(true);
    // primitive boolean에 wrapper Boolean => 충돌
    

    isNotOk는, true값을 가진 Boolean wrapper 객체가 생성이 되면서 primitive 타입인 isNotOk변수에 할당하려고 하지만 불가능하다.
    boolean은 primitive이고, Boolean은 new로 인해 wrapper 객체이기 때문에 서로 달라서 충돌이 일어난다.

Number


숫자를 나타내는 가장 기본적인 타입이다.

  • 숫자를 다양한 형태로 나타내기

    10진수뿐 만 아니라 16진수 8진수 등등 모두 자바스크립트에서도 가능한 것이다. 그렇기에 타입스크립트에서도 가능하다.

    let decimal: number = 6; // 10진수
      
    let hex: number = 0xf00d; // 16진수
      
    let binary: number = 0b1010; // 2진수
      
    let octal: number = 0o744; // 8진수
      
    let notANumber: number = NaN; // NaN도 숫자취급
      
    let nuderscoreNum: number = 1_000_000; // 백만
    

Comments