[TypeScript] 템플릿 리터럴과 계산된 프로퍼티로 프로퍼티명 동적 문자열 넣기(변수값을 정해진 프로퍼티명으로 사용하기) - TypeOrm

2023. 4. 5. 08:59· Node.js/TypeScript

TypeScript를 사용하여 NestJS + TypeORM 개발을 하던 도중, 문자열을 프로퍼티명으로 적어야 하는 상황이 생겼습니다.

 

상황상 컬럼을 Enum으로 둘 수 없었고, Enum의 요소들 각각을 컬럼으로 집어넣었습니다.

예를 들어서 element1, element2, element3가 하나의 컬럼에 있는 것이 아니라 각각의 element1, element2, element3로 컬럼이 독립적으로 존재하는 것입니다.

 

이 상황에 프론트에서 Enum에 속하는 element1, element2, element3을 someElement라는 속성의 값으로 전달을 하게 되면, 이를 업데이트를 해야 하는 상황이 왔었는데, 기존에는 프로퍼티에 element1, element2, element3를 이름으로 적어야 하지만, someElement라는 속성의 값이 요청으로 들어오게 됐습니다.

 

즉, 변수에 있는 값을 특정 메서드에 들어가는 인자의 프로퍼티명으로 사용해야 하는 상황이었습니다.

 

예를 들자면 아래와 같습니다.

@Entity('example_table')
class ExampleTable {
	@PrimaryGeneratedColumn()
    id: number;
    
    @Column({ type: 'int', default: 0, nullable: true })
    element1: number;
    
    @Column({ type: 'int', default: 0, nullable: true })
    element2: number;
    
    @Column({ type: 'int', default: 0, nullable: true })
    element3: number;
}

const Element = {
	element1: 'element1',
    element2: 'element2',
    element3: 'element3',
} as const;

type Element = typeof Element[keyof typeof Element];

// example-table.repository.ts

...
	updateExampleTableWithElement(id: number, element: Element) {
    	return this.createQueryBuilder('exampleTable')
        	.update()
            .set({ element }) // 여기서도 값을 하나 증가시키는 Query를 사용해서 문자열을 써야 했습니다. 지금은 그냥 업데이트하는 예시입니다.
        	.where('exampleTable.id = :id', { id })
            .returning(['id'])
            .execute();
    }

위와 같은 상황일 때, element는 ExampleTable 엔티티에 존재하지 않는 속성이므로, 타입 에러가 발생하게 됩니다.

이를 해결하기 위해서는 오직 element1, element2, element3를 프로퍼티명으로 기재해야 합니다.

 

이때, 문자열을 프로퍼티명으로도 사용할 수 있기에, 템플릿 리터럴과 플레이스 홀더를 사용해 프로퍼티명으로 등록합니다.

그런데, 바로 백틱을 사용해서 플레이스 홀더로 변수를 프로퍼티명으로 넣으려면 `property assignment required`라는 오류가 발생합니다.

	.set({
    	`${element}`: `${element} + 1`,
        ~~~~~~~~~ Parsing Error: property assignment expected
        })

 

이를 해결하기 위해서 아래와 같이 기재하면 됩니다.

	.set({
    	[`${element}`]: `${element} + 1`,
        })

이로서, 내가 원하는 컬럼을 바디의 속성으로 받아 변수값을 프로퍼티명으로 사용해야 하는 상황일 때 적절하게 대처할 수 있게 됐습니다!

저작자표시 비영리 (새창열림)

'Node.js > TypeScript' 카테고리의 다른 글

[TypeScript] snake case 프로퍼티 객체를 camel case 프로퍼티 객체로 변환하기  (0) 2023.06.20
[TypeScript] 클래스 Class  (0) 2022.09.27
'Node.js/TypeScript' 카테고리의 다른 글
  • [TypeScript] snake case 프로퍼티 객체를 camel case 프로퍼티 객체로 변환하기
  • [TypeScript] 클래스 Class
턴태
턴태
import { Dream } from "future";
턴태
턴태의 밑바닥부터 시작하는 de-vlog
턴태
전체
오늘
어제
  • ROOT (187)
    • Node.js (37)
      • ES6 (1)
      • TypeScript (3)
      • Express.js (16)
      • NestJS (16)
      • JS (24)
    • 프론트엔드 (29)
      • CS (5)
    • 백엔드 (1)
      • 검색 (2)
      • Database (1)
    • 기타 툴 (1)
      • git (1)
    • 데브옵스 & 인프라 (19)
      • Kubernetes (15)
      • Docker (2)
      • Monitoring (1)
      • IaC (1)
    • Algorithm (90)
      • Implementation & simulation (5)
      • Math (4)
      • Brute Force (1)
      • String (0)
      • Graph (5)
      • Recursion & Backtracking (19)
      • Divide & Conquer (2)
      • Dynamic Programming (18)
      • Greedy (13)
      • Priority Queue (2)
      • Binary Search (6)
      • Data Structure (7)
      • Shortest Path (5)
      • Minimum Spanning Tree (1)
      • Sorting (1)
      • Prefix Sum (1)
    • Linux (1)
      • Ubuntu (1)
    • Diary (5)
      • Algorithm (1)
      • Conference (1)
      • Retrospective (3)
    • Book (0)
      • Self-Development (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 오먹
  • Kubernetes
  • 노드
  • k8s
  • 인프런
  • Toy Project
  • N과 M
  • GREEDY
  • 다이나믹 프로그래밍
  • dynamic programming
  • 타입스크립트
  • 파이썬
  • 디프만
  • Express
  • baekjoon
  • Omuk
  • 인프런X디프만
  • TypeScript
  • 익스프레스
  • nestjs
  • node.js
  • python
  • 자바스크립트
  • 백트래킹
  • 네스트
  • 백준
  • 토이프로젝트
  • 쿠버네티스
  • backtracking
  • 함수형 프로그래밍

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
턴태
[TypeScript] 템플릿 리터럴과 계산된 프로퍼티로 프로퍼티명 동적 문자열 넣기(변수값을 정해진 프로퍼티명으로 사용하기) - TypeOrm
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.