TypeScript - Primitive Type 2

lbr·2022년 7월 15일

Primitive Type

boolean

let isDone: boolean = false;

isDone = true;

console.log(typeof isDone); // 'boolean'

let isOk: Boolean = true;

// let isNotOk: boolean = new Boolean(true); // 에러

number

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도 number타입입니다.

let underscoreNum: number = 1_000_000; // 이런 표기도 가능합니다.

string

let myName: string = "Mark";
myName = 'Anna';

let fullName: string = 'Mark Lee';
let age: number = 39;

let sentence: string = `Hello, My name is ${ fullName }.

I'll be ${ age + 1 } years old next month.`;

console.log(sentence);

Symbol

console.log(Symbol('foo') === Symbol('foo')); // false
  • 각각의 symbol은 두개가 완전히 다른것을 나타내고 있습니다.
  • 일반적으로 심볼 타입은 객체의 프로퍼티 키를 고유하게 설정함으로써 프로퍼티 키의 충돌을 방지하기 위해 사용됩니다.
  • 일반적으로 심볼은 객체의 프로퍼티 키로 사용됩니다.
  • 접근을 막거나 접근을 필요한 경우에만 허락할 때, 이것을 이용해서 처리합니다.

참고

심볼타입을 사용할때 에러가 나는 경우가 있습니다.
이 경우는 Symbol이라는 것을 사용할 수 있는 TypeScript 환경이 아니기 때문입니다.

해결방법

  • tsconfig.json에서 아래와 같이 추가해줍니다.

예제

const sym = Symbol(); // sym은 이제 고유한 값을 가지게 되었습니다.
//sym을 이용해서만 접근할 수 있는 object의 프로퍼티를 만들 때 많이 사용합니다.

const obj = {
  [sym]: "value", // [sym] 으로 작성하여 위에서 생성한 sym값이 들어오도록합니다.
};

//obj['sym']; // 이 값으로는 접근할 수 없습니다.
obj[sym]; // 이 값으로는 접근가능합니다.

함수로 사용할 때는 대문자(Symbol) 심볼.
타입으로 사용할 때는 소문자(symbol) 심볼.

Undefined & Null

let u: undefined = undefined;
let n: null = null;

타입도 소문자, 값도 소문자로 작성해야 합니다.

이 타입을 가진 변수들에 할당할 수 있는 것들은 거의 없습니다.

  • undefined타입을 가진 변수에는 undefined 값 이외에는 할 수 있는 것이 없습니다. 마찬가지로 null이라는 타입을 가진 변수에도 null 말고는 할 수 있는것이 없습니다.

설정

undefinednull 은 다른 모든 타입들의 하위타입으로 존재합니다.(설정을 하지 않으면..)

null이나 undefined를 다른 다른타입에 할당할 수 없게 tsconfig에서 --strictNullChecks 를 사용하는 것이 타입적으로 안전합니다. 그래서 보통 --strictNullChecks 을 사용하는 편입니다.

이제 예를들어 number타입에 null과 undefined를 할당할 수 없게 되면, 코딩할 때 매우 힘들 것입니다. 왜냐하면 null과 undefined를 자주 사용하기 때문입니다.
그래서 null과 undefined를 함께 사용하기 위해서는 union type 을 이용해야 합니다.

tsconfig.json

  • "strict": true 를 사용하면 그 아래 모든 하위 Type Checking과 관련된 옵션들을 전부 true로 사용하게 됩니다.
    여기에는 앞서 말한 --strictNullChecks 도 표함되어 있습니다.

void타입

void에는 undefined를 할당할 수 있습니다. null은 할당할 수 없습니다. 의미적으로 void은 undefined와 비슷한 의미를 가지고 있습니다. 그래서 void에 undefined를 넣는 것은 의미적으로는 그렇게 잘못된 것은 아닙니다.

예제

//let MyName: string = undefined; // 할당할 수 없습니다.
//let u: undefined = null; // 할당할 수 없습니다.
// let v: void = null; // void타입에는 null을 넣을 수 없지만,
let v: void = undefined; // undefined는 넣을 수 있습니다.
let union: string | null = null; // 이것이 union 타입입니다.
// 이제 string 타입도 넣을 수 있고, null도 넣을 수 있습니다.
union = "Mark";

null in JavaScript

let n: null = null;

console.log(); // null
console.log(typeof n); // object
  • runtime에서의 특이한현상입니다.
    null값을 runtime에서 typeof 연산자를 이용해서 알아내면, object로 나옵니다.

undefined in JavaScript

let u: undefined = undefined;

console.log(u); // undefined
console.log(typeof u); // undefined
profile
ro

0개의 댓글