반응형
Jake Seo
제이크서 위키 블로그
Jake Seo
전체 방문자
오늘
어제
  • 분류 전체보기 (715)
    • 일상, 일기 (0)
    • 백준 문제풀이 (1)
    • 릿코드 문제풀이 (2)
    • 알고리즘 이론 (10)
      • 기본 이론 (2)
      • 배열과 문자열 (8)
    • 데이터베이스 (15)
      • Planet Scale (1)
      • MSSQL (9)
      • 디비 기본 개념 (1)
      • SQLite 직접 만들어보기 (4)
    • 보안 (7)
    • 설계 (1)
    • 네트워크 (17)
      • HTTP (9)
      • OSI Layers (5)
    • 회고 (31)
      • 연간 회고 (2)
      • 주간 회고 (29)
    • 인프라 (52)
      • 도커 (12)
      • AWS (9)
      • 용어 (21)
      • 웹 성능 (1)
      • 대규모 서비스를 지탱하는 기술 (9)
    • 깃 (7)
    • 빌드 도구 (7)
      • 메이븐 (6)
      • 그레이들 (0)
    • Java (135)
      • 이펙티브 자바 (73)
      • 자바 API (4)
      • 자바 잡지식 (30)
      • 자바 디자인 패턴 (21)
      • 톰캣 (Tomcat) (7)
    • 프레임워크 (64)
      • next.js (14)
      • 스프링 프레임워크 (28)
      • 토비의 스프링 (6)
      • 스프링 부트 (3)
      • JPA (Java Persistence API) (5)
      • Nest.js (8)
    • 프론트엔드 (48)
      • 다크모드 (1)
      • 노드 패키지 관리 매니저 (3)
      • CSS (19)
      • Web API (11)
      • tailwind-css (1)
      • React (5)
      • React 새 공식문서 요약 (1)
      • HTML (Markup Language) (5)
    • 자바스크립트 (108)
      • 모던 자바스크립트 (31)
      • 개념 (31)
      • 정규표현식 (5)
      • 코드 스니펫 (1)
      • 라이브러리 (6)
      • 인터뷰 (24)
      • 웹개발자를 위한 자바스크립트의 모든 것 (6)
      • 팁 (2)
    • Typescript (49)
    • 리눅스와 유닉스 (10)
    • Computer Science (1)
      • Compiler (1)
    • IDE (3)
      • VSCODE (1)
      • IntelliJ (2)
    • 세미나 & 컨퍼런스 (1)
    • 용어 (개발용어) (16)
      • 함수형 프로그래밍 용어들 (1)
    • ORM (2)
      • Prisma (2)
    • NODEJS (2)
    • cypress (1)
    • 리액트 네이티브 (React Native) (31)
    • 러스트 (Rust) (15)
    • 코틀린 (Kotlin) (4)
      • 자바에서 코틀린으로 (4)
    • 정규표현식 (3)
    • 구글 애널리틱스 (GA) (1)
    • SEO (2)
    • UML (2)
    • 맛탐험 (2)
    • 리팩토링 (1)
    • 서평 (2)
    • 소프트웨어 공학 (18)
      • 테스팅 (16)
      • 개발 프로세스 (1)
    • 교육학 (1)
    • 삶의 지혜, 통찰 (1)
    • Chat GPT (2)
    • 쉘스크립트 (1)
    • 컴파일 (2)
    • Dart (12)
    • 코드팩토리의 플러터 프로그래밍 (4)
    • 플러터 (17)
    • 안드로이드 스튜디오 (1)
    • 윈도우즈 (1)
    • 잡다한 백엔드 지식 (1)
    • 디자인 패턴 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 작업기억공간
  • item8
  • serverless computing
  • 자바 검증
  • 메이븐 골
  • 도커공식문서
  • 슬로우 쿼리
  • 서버리스 컴퓨팅
  • MSSQL
  • 디자인패턴
  • 알고리즘
  • 이펙티브 자바
  • 자바스크립트 인터뷰
  • 스프링 검증
  • 객체복사
  • 러스트
  • 싱글톤
  • pnpm
  • item9
  • 자료구조
  • 빈 검증
  • Java
  • Next.js
  • 추상 팩터리 패턴
  • 플라이웨이트패턴
  • 참조 해제
  • 이펙티브 자바 item9
  • 메이븐 페이즈
  • 이펙티브자바
  • 프로그래머의 뇌
  • next js app
  • 자바 디자인패턴
  • prerendering
  • NEXT JS
  • 외래키 제약조건
  • 메이븐 라이프사이클
  • 싱글톤 패턴
  • item7
  • 자바
  • 토비의 스프링
  • bean Validation
  • 팩터리 메서드 패턴
  • 느린 쿼리
  • Pre-rendering
  • try-with-resources
  • 싱글턴
  • Javadoc 자바독 자바주석 주석 Comment
  • 자바스크립트
  • 자바스크립트 면접
  • rust

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Jake Seo

제이크서 위키 블로그

Typescript

TS022. 타입스크립트 튜플 정리

2023. 12. 30. 22:07

튜플이란?

  • 길이와 타입을 알고 있는 배열의 한 유형을 말한다.
  • ex) 좌표는 2의 길이를 가진 number 타입 배열로 [number, number] 로 표현 가능하다.
  • 튜플은 일반 배열과 달리 길이에 대한 정보를 알고 있으므로 범위를 넘어서는 인덱스에 접근했을 때 컴파일 타임에 에러가 표기된다.
  • 당연히 일반 배열처럼 디스트럭처링도 가능하다.
  • 튜플에는 옵셔널 요소가 있을 수 있다.
  • 특정한 형태로 된 고정된 데이터 구조를 나타내거나 DB 행과 같은 것을 나타낼 때 매우 유용하다.

기본 튜플 선언 방법

const tuple: [number, string] = [30, "Jake"];
tuple.push("abc"); // push 로 수정이 된다는 게 흠임
let person: [string, number];
person = ["Alice", 30]; // Correct
// person = [30, "Alice"]; // Error: Type 'number' is not assignable to type 'string'

console.log(`Name: ${person[0]}, Age: ${person[1]}`); // Output: Name: Alice, Age: 30

person[1] = 31; // Correct
// person[1] = "Thirty-one"; // Error: Type 'string' is not assignable to type 'number'

튜플의 옵셔널 요소

let employee: [string, number, boolean?];
employee = ["Bob", 25]; // Optional element omitted
employee = ["Charlie", 28, true]; // Optional element included

나머지 연산자를 튜플에 적용하기

let numbers: [string, ...number[]] = ["Numbers", 1, 2, 3];

더 안전한 readonly 튜플 선언하기

const unmodifiableTuple: readonly [number, string] = [30, "Jake"];
unmodifiableTuple.push("abc"); // readonly 라서 에러가 남

일반 배열을 튜플로 취급되게 만들기

const user = [30, "jake"] as const;
// as const 때문에 type narrowing 이 일어나 readonly [30, "jake"] 로 타입추론이 된다.

튜플에 이름 짓기

  • 값에 대한 의미를 더 알기 쉬워진다.
  • 이를 Labeled Tuples 라고 하는데 타입스크립트 4.0 이상이 필요하다.
const namedTuple: [name: string, age: number] = ["jake", 30];

튜플을 튜플에 할당하기

  • 튜플을 서로 할당할 때는 같은 형태끼리만 할당 가능하다.
let user1: [number, string] = [30, "jake"];
let user2: [string, number] = ["jake", 30];
let user3: [number, string] = [22, "jack"];

user1 = user3; // 정상
user1 = user2; // 에러 -> 같은 형태의 튜플이 아님

튜플과 배열의 관계

  • 구체적인 타입을 덜 구체적인 타입으로 할당하는 것은 가능하다. (더 느슨하게 만듦)
  • 덜 구체적인 타입을 더 구체적인 타입으로 할당하는 것은 불가능하다. (더 조일 수는 없음)
let nums: [number, number] = [1, 2];
let nums2: number[] = [1, 2, 3, 4, 5];
nums2 = nums; // 에러가 나지 않음. nums 는 사실 nums2 를 포괄하는 타입이기 때문에 상관이 없음 -> any 가 모든 타입을 포용하는 것과 마찬가지
nums = nums2; // 에러, [number, number] 는 number[] 보다 더 좁은 타입이라서 불가능.

다차원 튜플

  • 다차원 배열과 동일하게 타입 정의를 하면 된다.
const tuple2D: [number, number][] = [
  [1, 1],
  [2, 2],
  [3, 3],
];
반응형
저작자표시 비영리 (새창열림)

'Typescript' 카테고리의 다른 글

TS024. 타입스크립트 중첩된 오브젝트 사용 시 주의점 (Nested Object)  (0) 2023.12.30
TS023. 타입스크립트 객체 초과 프로퍼티 검사 정리  (0) 2023.12.30
TS021. 타입스크립트 다차원 배열  (0) 2023.12.30
TS020. 자바스크립트 배열의 문제점과 타입스크립트 배열의 특징  (0) 2023.12.30
TS019. 타입스크립트 never 타입  (0) 2023.12.30
    'Typescript' 카테고리의 다른 글
    • TS024. 타입스크립트 중첩된 오브젝트 사용 시 주의점 (Nested Object)
    • TS023. 타입스크립트 객체 초과 프로퍼티 검사 정리
    • TS021. 타입스크립트 다차원 배열
    • TS020. 자바스크립트 배열의 문제점과 타입스크립트 배열의 특징
    Jake Seo
    Jake Seo
    ✔ 잘 보셨다면 광고 한번 클릭해주시면 큰 힘이 됩니다. ✔ 댓글로 틀린 부분을 지적해주시면 기분 나빠하지 않고 수정합니다. ✔ 많은 퇴고를 거친 글이 좋은 글이 된다고 생각합니다. ✔ 간결하고 명료하게 사람들을 이해 시키는 것을 목표로 합니다.

    티스토리툴바