원시타입과 리터럴타입

woodstock·2023년 7월 30일
0
post-thumbnail

원시타입과 리터럴타입


onebite-typescript/chapter1.ts at main · winterlood/onebite-typescript

원시타입

원시 타입(Primitive Type)은 동시에 한개의 값만 저장할 수 있는 타입들을 말한다.

예를 들어 원시 타입이 아닌 배열이나 객체 같은 비 원시 타입들은 동시에 여러개의 값들을 저장할 수 있는 반면, number, string, boolean 등의 원시 타입은 숫자면 숫자, 문자열이면 문자열 딱 하나의 값만 저장할 수 있다.

원시 타입은 여러 타입들중 가장 기본이 되는 타입이다.

number 타입

number 타입은 자바스크립트에서 숫자를 의미하는 모든 값을 포함하는 타입이다.

단순 정수 뿐만 아니라 소수, 음수, Infinity, NaN등의 특수한 숫자들도 포함한다.

// number
let num1: number = 123;
let num2: number = -123;
let num3: number = 0.123;
let num4: number = -0.123;
let num5: number = Infinity;
let num6: number = -Infinity;
let num7: number = NaN;

참고로 이때 변수의 이름 뒤에 콜론(:)과 함께 변수의 타입을 정의하는 이런 문법을 ‘타입 주석’ 또는 ‘타입 어노테이션’이라고 부른다.

number 타입으로 정의한 변수에는 number 타입을 제외한 값을 할당할 수 없으며, number 타입의 값이 사용할 수 없는 toUpperCase 등의 메서드는 사용할 수 없다.


string 타입

string 타입은 문자열을 의미하는 타입이다.

단순 쌍따옴표 문자열 뿐만 아니라 작은 따옴표, 백틱, 템플릿 리터럴로 만든 모든 문자열을 포함한다.

// string
let str1: string = "hello";
let str2: string = 'hello';
let str3: string = `hello`;
let str4: string = `hello ${str1}`;


boolean 타입

boolean 타입은 참과 거짓만을 저장하는 타입입니다. true 또는 false만 이 타입에 해당된다.

// boolean
let bool1 : boolean = true;
let bool2 : boolean = false;

null 타입

null 타입은 오직 null 값만 포함하는 타입이다.

// null
let null1: null = null;

undefined 타입

// undefined 타입
let unde1: undefined = undefined;

undefined 타입 역시 null 타입과 마찬가지로 오직 하나의 값 undefined만 포함하는 타입이다.

null 값을 다른 타입의 변수에 할당하기

자바스크립트에서는 다음과 같이 아직 값이 정해지지 않은 상태에서는 변수에 null 을 임시로 넣어두곤 했다.

let numA = null;

그러나 만약 타입스크립트에서는 이 numA가 만약 number 타입의 변수일 경우 다음과 같이 오류가 발생한다.

null은 number 타입에 포함되는 값이 아니기 때문에 오류가 발생하는 것이다.

그러나 앞서 이야기 했듯 null 값을 변수의 임시값으로 활용하고 싶은 상황이 충분히 있을 수 있다.

이럴 때에는 다음과 같이 tsconfig.json의 strcitNullChecks(엄격한 null 검사) 옵션을 false로 설정하면 된다.

{
  "compilerOptions": {
    ...
    "strictNullChecks": false,
		...
  },
  "ts-node": {
    "esm": true
  },
  "include": ["src"]
}

strictNullChecks 옵션은 타입스크립트에서 null 값을 null 타입 이외의 타입의 변수에 할당하는 것을 금지할지 허락할지 여부를 결정하는 옵션이다.

기본값은 true이며 이 옵션이 true로 켜져있을 경우 엄격하게 null 값을 검사해 null 타입이 아닌 변수에는 null 값을 할당할 수 없도록 제한한다.

그런데 위 코드처럼 false로 설정해 이 옵션을 끌 경우 어떤 타입의 변수든 null 값을 자유롭게 할당할 수 있다.

또 이 옵션은 이름에서 알 수 있듯 strict 옵션의 하위 옵션이다. 따라서 strict 옵션이 true이면 자동으로 true로 설정되며 반대로 strict 옵션이 false이면 자동으로 false로 설정된다.

만약 위 코드처럼 우리가 직접 설정하면 설정된 옵션에 따른다.

이 옵션은 안전한 타입스크립트 코드를 작성하는 측면에서는 그닥 큰 도움이 되지는 않으니 지금은 true로 설정하거나 아예 옵션 설정을 지우겠다.

{
  "compilerOptions": {
    ...
    "strictNullChecks": true, // 또는 삭제하겠다.
		...
  },
  "ts-node": {
    "esm": true
  },
  "include": ["src"]
}

리터럴 타입

타입스크립트에는 string, number 처럼 범용적으로 많은 값을 포함하는 타입 뿐만 아니라 딱 하나의 값만 포함하는 타입도 존재한다.

따라서 다음과 같이 변수의 타입을 숫자 10으로 설정하는 것 또한 가능하다.

let numA: 10 = 10;

변수 numA의 타입을 숫자 10으로 설정했다.

이렇게 설정하면 이제 numA에는 10 이외의 값을 저장할 수 없게 된다.

이렇듯 하나의 값만 포함하도록 값 자체로 만들어진 타입을 타입스크립트에서는 ‘리터럴 타입’이라고 부른다. 참고로 여기서 리터럴은 우리말로 ‘값’ 이라는 뜻 이다.

숫자 값 뿐만 아니라 문자열이나 불리언 타입의 값도 모두 리터럴 타입으로 만들 수 있다.

let strA: "hello" = "hello";
let boolA: true = true;
let boolB: false = false;
profile
해내는 사람

0개의 댓글