예전에 nestjs 관련 강의를 듣다가 타입스크립트에 Partial 같은 유틸리티 타입이 존재한다는 사실을 알게 되었다.
Partial 유틸리티 타입은 대상이 되는 집합의 모든 프로퍼티를 선택적으로 변환한다.
예를 들어 Partial<Human> 이라면, Human의 모든 프로퍼티는 선택적(?을 이용하여 표기하는 것)으로 바뀐다.
구체적인 예시를 들어보자.
특정 유저의 정보를 변환하는 update 메서드가 있다. 이 메서드는 UserEntity라는 유저의 프로퍼티를 정의한 클래스를 input으로 받아들이는데, 해당 유저의 다양한 프로퍼티 중 실제로 업데이트가 필요한 프로퍼티만을 객체를 통해 전달하도록 동작하게 만들고 싶다. UserEntity 및 update는 아래와 같다.
이때 몇가지 제한을 걸자. UserEntity는 다른 entity들과 관련 없는 변수들(id, email, password, admin)의 정보를 새로운 유저를 생성할 때 필요로 하므로, 이 정보들을 입력받아야 한다(create시 모든 정보가 "필수적으로" 필요하다). 반대로 update 메서드에서는 특정 프로퍼티만을 넘길 수 있도록 구현해야 한다.
위와 같은 경우, UserEntity의 모든 값을 선택적으로 지정하는 새로운 entity를 생성한다면 문제를 해결할 수 있다. 그러나 굳이 이를 만들 필요 없이 단순히 Partial타입으로 선언하면 같은 동작을 더 간단하게 구현할 수 있다.
Partial 유틸리티 타입은 위와 같이 모든 값을 선택적으로 받을 수 있게 한다. 위 경우 유저의 정보인 admin, email. id 등의 프로퍼티 등 기존 UserEntity의 값을 선택적으로 입력할 수 있다. 만약 유저의 특정 정보만을 수정해야 하거나, 많은 설정 중 일부 설정만 바꾸어야 하는 상황이 존재한다면, Partial은 좋은 답이 될 것 같다.
'javascript > typescript' 카테고리의 다른 글
[타입스크립트] 함수 오버로딩 (0) | 2021.12.22 |
---|---|
[타입스크립트] 유틸리티 타입 part 1 (0) | 2021.10.24 |
[타입스크립트] Generics . 제네릭 (0) | 2021.10.14 |
[타입스크립트] Narrowing (0) | 2021.10.12 |
[타입스크립트] express 를 typescript와 사용하기 (0) | 2021.10.06 |