class-transformer의 plainToClass를 이용한 plain object에서 class object로 변환하기
자바스크립트에는 두 가지 형태의 객체가 있다.
- plain (literal) objects
- class (constructor) objects
plain object는 Object 클래스의 인스턴스이다. { }
표기법을 통해 생성하면 객체 리터럴이라 부르기도 한다. class object는 생성자, 프로퍼티 및 메소드가 있는 클래스의 인스턴스이다. 일반적으로 class 통해 정의한다.
class-transformer는 위에서 설명한 자바스크립트의 plain object를 class object로 쉽게 변환해준다. 자바스크립트의 plain object를 class object로 변환해서 얻게 되는 이점은 레포지토리(https://github.com/typestack/class-transformer)에서 확인할 수 있다. class-transformer 설치 및 코드는 다음과 같다.
class-transformer 설치
사용하고 있는 패키지 매니저를 사용해서 class-transformer, reflect-metadata를 설치한다. 나는 yarn을 통해서 설치했다.
$ yarn add class-transformer
$ yarn add reflect-metadata
설치가 끝나면 class-transformer의 plainToClass
메소드를 활용해 plain object를 class object로 변환해보자. 코드는 다음과 같다.
코드
fromPlainUser
객체 리터럴와 GetUserResponse
클래스 객체를 만들었다. 다음으로 class-transformer의 plainToClass
메소드를 이용해 plain object를 class object로 변환한다.
import moment = require('moment');
import { plainToClass, Expose} from 'class-transformer'
const fromPlainUser = {
id: 1,
uuid: "50CC75F5-537C-4407-B4B3-951F95E16F90",
name: "cherrypick",
isActive: true,
createdAt: moment("2019-08-17").toDate(),
updatedAt: moment("2019-08-17").toDate()
}
class GetUserResponse {
id: number
uuid: string
name: string
isActive: boolean
createdAt: Date
updatedAt: Date
}
console.log(fromPlainUser)
console.log(plainToClass(GetUserResponse, fromPlainUser))
결과
기존의 plain object가 GetUserResponse
class object로 변환된 것을 확인할 수 있다.
{
id: 1,
uuid: '50CC75F5-537C-4407-B4B3-951F95E16F90',
name: 'cherrypick',
isActive: true,
createdAt: 2019-08-16T15:00:00.000Z,
updatedAt: 2019-08-16T15:00:00.000Z
}
GetUserResponse {
id: 1,
uuid: '50CC75F5-537C-4407-B4B3-951F95E16F90',
name: 'cherrypick',
isActive: true,
createdAt: 2019-08-16T15:00:00.000Z,
updatedAt: 2019-08-16T15:00:00.000Z
}
오늘은 class-transformer의 plainToClass
메소드에 대해 알아봤다. 이 외에도 유용한 메소드가 많이 있어 차례대로 포스팅 할 예정이다.