시퀄라이즈의 타입스크립트 호환성
(이 글은 작성중입니다.)
가벼움 등의 이점으로 노드를 이용하여 많은 기업들이 빠르게 서비스를 만들어 나갔지만 결국 동적언어의 한계로 타입스크립트가 등장했고, 이로 인해 더욱 더 노드가 트렌드가 되며 많은 인기를 끌었습니다.
기존 자바스크립트 라이브러리들도 오픈소스 개발자들로 인해 빠르게 타입지원을 이뤄나가 순식간에 TS를 도입하는 사례가 많았고 빠르게 국내 개발시장에 자리잡은 것 같습니다.
빠르게 나아지고 발전하고 있지만 항상 본인의 업무 환경이 최신 환경일 수는 없습니다.
어느 순간 현재 주어진 불편한 개발환경에 익숙해졌고, 어떤 환경에서도 방법은 존재하기 때문에 합리화했던 부분도 있었습니다.
더 합리적이고 좋은 방법이 있는데 여러 이유와 핑계들로 개선하려하지 않는 자세가 결국 공부의 필요성과 의욕도 저하시키는 것 같습니다.
생각하고 고민해보지 않고 템플릿처럼 복붙해서 사용해서 예전 면접 때 제대로 답변하지 못했던 질문을 정리해보고 향후 이어서 TypeORM 혹은 Prisma에 대해 비교해보겠습니다.
Q1.) Sequelize는 타입스크립트를 제대로 지원하지 않는다고 하는데 사용하시면서 어떠셨나요??
Q2.) TypeORM에 비해서 불편한 점은 없으셨나요??
TypeScript | Sequelize
We're working hard on making Sequelize a breeze to use in TypeScript.
sequelize.org
작성일 기준 stable 버전은 6.37.3 이고, 3개월 전에 배포되었습니다.
최근까지 꾸준히 지원하는 것에 비해서는 INFO에서도 아직 타입스크립트를 완전하게 지원하는 것 같진 않은 듯한 설명입니다.
이어서 시퀄라이즈는 런타임 속성할당에 크게 의존하여, 즉시 사용할 수 없고 여러 수동 선언을 필요로한다고 나와있습니다.
import { Model, Optional } from 'sequelize';
// We don't recommend doing this. Read on for the new way of declaring Model typings.
type UserAttributes = {
id: number;
name: string;
// other attributes...
};
// we're telling the Model that 'id' is optional
// when creating an instance of the model (such as using Model.create()).
type UserCreationAttributes = Optional<UserAttributes, 'id'>;
class User extends Model<UserAttributes, UserCreationAttributes> {
declare id: number;
declare name: string;
// other attributes...
}
TypeScript를 사용하기 위해서 공식문서에서 설명해주고 있는 사용법 예시 코드입니다.
어노테이션 기법없이 사용하려니, import를 제외하고도 많은 양의 코드가 필요합니다.
심지어 단 두 개의 프로퍼티임에도 벌써 중복도 존재하는 것을 보실 수 있습니다.
(이 글은 작성중입니다.)