본문 바로가기
웹 프로그래밍/JavaScript | TypeScript

[한 입 크기로 잘라먹는 TypeScript] CH2. 타입스크립트 기본 1(0. 기본타입의 정의, 1.원시타입과 리터럴타입, 2.배열과 튜플)

by 청량리 물냉면 2024. 4. 5.
반응형

chapter 2. 타입스크립트 기본

0. 기본 타입(Basic Types) 이란?

  • TS가 자체적으로 제공하는 타입, 내장 타입
  • TS에서만 제공하는 타입: any, void, never, unknown
  • 타입 계층도: TS가 제공하는 기본 타입들을 계층에 따라 분류한 그림

타입 계층도

 

chapter 2. 실습 환경 설정

{
  "compilerOptions": {
    "target": "ESNext",
    "module": "ESNext",
    "outDir": "dist",
    "strict": true,
    "moduleDetection": "force"
  },
  "include": ["./"]
}
tsc	//컴파일
tsx index.ts	//실행

 

1. 원시타입과 리터럴 타입

원시타입

  • 동시에 한 개의 값만 저장할 수 있는 타입들
  • number, string, boolean...

📚 number 타입

// 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;

num1 = 'hello'; // ❌
num1.toUpperCase(); // ❌
  • js에서 숫자를 의미하는 모든 값을 포함하는 타입
  • 정수, 소수, 음수, Infinity, NaN 등 모두 포함
  • number 타입으로 정의한 변수에는 number 타입 이외의 값을 할당할 수 없다. 당연히 toUpperCase와 같은 메서드도 사용 불가

📚 string 타입

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

문자열을 의미하는 타입

 

📚 boolean 타입

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

참(true), 거짓(false)만 저장하는 타입

 

📚 null 타입

// null
let null1: null = null;

오직 null값만 포함하는 타입

 

📚 undefined 타입

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

오직 undefined만 포함하는 타입

 

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

아직 값이 정해지지 않을 시 변수에 null을 임시로 넣어두기 👉 JS에서는 가능, TS에서는 불가

가능하게 만들고 싶다면 `strcitNullChecks: false` (엄격한 null 검사) 설정

 

 

리터럴 타입

하나의 값만 포함하도록 값 자체로 만들어진 타입

let a: 10 = 10;
let b: "hello" = "hello";
  • 변수 a의 타입을 숫자 10으로 설정했으므로, 이제 a에는 10 이외의 값을 저장할 수 없게 된다.
  • 마찬가지로 b 역시 타입을 "hello"로 지정했기 때문에 b에는 "hello" 외의 값을 저장할 수 없다.
  • 불리언 타입의 값도 리터럴 타입으로 만들 수 있다.

 

2. 배열과 튜플

  • 배열: JS 배열과 동일
  • 튜플: TS에서만 제공되는 타입

배열

✅ 배열 타입 정의 방법

let arr: number[] = [1, 2, 3, 4];

`변수 이름 : 배열요소타입[]`

let boolArr: Array<boolean> = [true, false, true];

`Array<배열요소타입>` 형태로도 배열의 타입 정의 가능(제네릭 문법)

 

다양한 타입 요소를 갖는 배열 타입 정의하기

let multiArr: (number | string)[] = [1, "hello"];

유니온 타입(바`|`를 이용해 여러 타입을 정의하는 문법)을 이용해

여러 타입 중 하나를 만족하는 경우 허용하는 범용적인 타입을 만들 수 있다.

 

차원 배열 타입 정의하기

let doubleArr : number[][] = [
  [1, 2, 3], 
  [4, 5],
];

 

튜플

  • 자바스크립트에는 없는 타입스크립트의 특수 타입
  • 길이와 타입이 고정된 배열
let tup: [number, string, boolean] = [1, "hello", true];

 

✅ 튜플도 배열이다

tsc를 이용해 튜플 타입이 정의된 타입스크립트 코드를 컴파일하면 튜플은 자바스크립트 배열로 변환된다.

따라서 튜플은 배열 메서드인 push, pop을 이용해 요소를 추가 및 삭제할 수 있다.

👉 🚫튜플 사용 시 배열 메서드를 이용해 추가 및 삭제 연산을 할 때에는 주의가 필요함🚫

let tup1: [number, number] = [1, 2];

tup1.push(1);  // 에러 발생 x
tup1.push(1);
tup1.push(1);
tup1.push(1);

 

튜플을 사용하는 이유

배열의 경우 기존 데이터와 순서가 다른 데이터를 입력할 시 에러가 발생하기 때문에 빨리 눈치채기 쉽지 않다.

const users = [
  ["이정환", 1],
  ["이아무개", 2],
  ["김아무개", 3],
  ["박아무개", 4],
  [5, "조아무개"], // <- 새로 추가함, 오류 발생 x
];

 

그러나 튜플의 경우 실수를 빨리 발견하고 에러 처리하기가 쉽다.

const users: [string, number][] = [
  ["이정환", 1],
  ["이아무개", 2],
  ["김아무개", 3],
  ["박아무개", 4],
  [5, "조아무개"], // 오류 발생
];

 

반응형